hch
2 天以前 e33b8deea8413bcbc74998122ad91e6c17504729
483 【游历】增加体力补充
2个文件已添加
8个文件已修改
2769 ■■■■■ 已修改文件
Main/System/BeautyMM/BeautyMMManager.Travel.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/BeautyMM/BeautyMMManager.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/BeautyMM/BeautyMMTravelWin.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/ItemTip/BoxGetItemModel.cs 231 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/ItemTip/ItemBatchUseWin.cs 135 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/ItemTip/ItemBatchUseWin.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/ItemTip/ItemTipUtility.cs 1205 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/KnapSack/Logic/ItemLogicUtility.cs 1145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/KnapSack/PackManager.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Message/RichTableEvent.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/BeautyMM/BeautyMMManager.Travel.cs
@@ -21,6 +21,8 @@
    public List<Int2> openChangeGridList = new List<Int2>(); // 前后对比,有变化的格子 ,打开前面前需清理
    public event Action<int> OnTravelInfoUpdate;
    public int addEnergyItemID;
    public int addEnergyValue;
    public int maxGirds = 0;
    public Int2 clickGirdPos = new Int2();
    public bool isClickDoor = false;    // 是否点击过门,用于帮玩家自动重置
Main/System/BeautyMM/BeautyMMManager.cs
@@ -83,7 +83,8 @@
        recoverTravelEnergyTime = int.Parse(config.Numerical2);
        travelRowCol = ConfigParse.GetMultipleStr<int>(config.Numerical3);
        maxGirds = travelRowCol[0] * travelRowCol[1];
        addEnergyItemID = int.Parse(config.Numerical4);
        addEnergyValue = int.Parse(config.Numerical5);
        
    }
Main/System/BeautyMM/BeautyMMTravelWin.cs
@@ -26,6 +26,7 @@
    [SerializeField] Image[] rightImgs;
    [SerializeField] Image[] wrongImgs;
    [SerializeField] UIEffectPlayer[] pointEffects;
    [SerializeField] Button addBtn;
    float gridWidth = 0;
    float gridHeight = 0;
@@ -40,6 +41,7 @@
        DisplyRate();
        buildResultBtn.AddListener(BuildLVUP);
        addBtn.AddListener(AddEnergy);
        var parentRect = girdsGo.GetComponent<RectTransform>();
@@ -302,4 +304,14 @@
            }
        }
    }
    void AddEnergy()
    {
        ItemLogicUtility.Instance.ShowItemBatchUseWin(BeautyMMManager.Instance.addEnergyItemID, ShowTip);
    }
    string ShowTip(long useCnt)
    {
        return Language.Get("UseItem1", BeautyMMManager.Instance.addEnergyValue * useCnt);
    }
}
Main/System/ItemTip/BoxGetItemModel.cs
@@ -10,75 +10,22 @@
public class BoxGetItemModel : GameSystemManager<BoxGetItemModel>
{
    List<string> commonShowAwardEvents = new List<string>();    //获取奖励的展示事件
    public override void Init()
    {
        var config = FuncConfigConfig.Get("CommonShowAwards");
        commonShowAwardEvents = JsonMapper.ToObject<List<string>>(config.Numerical1);
    }
    // void OnBeforePlayerDataInitialize()
    // {
    //     getItems = null;
    //     getCoinsType = 0;
    //     getCoinsCnt = 0;
    // }
    #region 处理服务器数据
    // public BoxGetItemInfo[] getItems { get; private set; }
    // public int getCoinsType { get; private set; }
    // public long getCoinsCnt { get; private set; }
    // public event Action<int, int, BoxGetItemInfo[]> RefreshGetItemAct;
    // public void SetGetBoxItemInfo(HA810_tagMCNotifyUseItemGetItem boxItemInfo)
    // {
    //     getItems = JsonMapper.ToObject<BoxGetItemInfo[]>(boxItemInfo.GetItemData);
    //     getCoinsType = boxItemInfo.MoneyType;
    //     getCoinsCnt = boxItemInfo.MoneyCount;
    //     if (!NewBieCenter.Instance.inGuiding)
    //     {
    //         List<Item> items = new List<Item>();
    //         for (int i = 0; i < getItems.Length; i++)
    //         {
    //             BoxGetItemInfo info = getItems[i];
    //             Dictionary<int, List<int>> useDataDic = ConfigParse.Analysis(info.UserData);
    //             if (useDataDic != null && useDataDic.TryGetValue((int)ItemUseDataKey.itemCount, out List<int> list) && list != null && list.Count > 0)
    //             {
    //                 int count = list[0];
    //                 items.Add(new Item(info.ItemID, count));
    //             }
    //             else
    //             {
    //                 items.Add(new Item(info.ItemID, info.Count));
    //             }
    //         }
    //         ItemLogicUtility.Instance.ShowGetItem(items, seconds: 0);
    //     }
    //     if (RefreshGetItemAct != null)
    //     {
    //         RefreshGetItemAct((int)boxItemInfo.UseItemID, (int)boxItemInfo.UseCount, getItems);
    //     }
    // }
    //获得奖励展示
    public void ReceiveAwardNotify(HA801_tagMCGiveAwardInfo netPack)
    {
        var eventName = UIHelper.ServerStringTrim(netPack.EventName);
        // 仙盟攻城战
        // if (eventName == "FamilyGCZSQGrid" || eventName == "FamilyGCZSQPass" || eventName == "FamilyGCZSQPassAll" ||
        //     eventName == "FamilyGCZContiribution" || eventName == "FamilyGCZAtk")
        // {
        //     ModelCenter.Instance.GetModel<FairySiegeActModel>()?.OnUpdateAwardInfoAction(netPack);
        //     return;
        // }
        // if (!commonShowAwardEvents.Contains(eventName))
        //     return;
        if (string.IsNullOrEmpty(eventName))
        {
            Debug.Log("获得物品展示 无事件名");
@@ -132,173 +79,11 @@
        ItemLogicUtility.Instance.ShowGetItem(showItems, eventName, isMergeItem:isMergeItem);
    }
    // public int GetUseCntByID(int itemId)
    // {
    //     return PackManager.Instance.GetItemUsedTimesToday(itemId);
    // }
    #endregion
    // #region 消耗材料货币开启的宝箱
    // public void SetModel(string guid, int itemId)
    // {
    //     ChestsConfig chestsConfig = ChestsConfig.Get(itemId);
    //     this.guid = guid;
    //     this.itemId = itemId;
    //     if (guid == "" || chestsConfig == null) return;
    //     ItemConfig boxConfig = ItemConfig.Get(itemId);
    //     if (PlayerDatas.Instance.baseData.LV < boxConfig.UseLV)
    //     {
    //         ServerTipDetails.DisplayNormalTip(Language.Get("MakeUseItem101", boxConfig.UseLV));
    //         return;
    //     }
    //     CheckOpenBoxCondi(guid, itemId);
    // }
    // public void CheckOpenBoxCondi(string guid, int itemId, int useCnt = 1)
    // {
    //     ChestsConfig chestsConfig = ChestsConfig.Get(itemId);
    //     if (chestsConfig == null) return;
    //     ItemConfig boxConfig = ItemConfig.Get(itemId);
    //     if (chestsConfig.ExpendItemID != 0)
    //     {
    //         ItemConfig itemConfig = ItemConfig.Get(chestsConfig.ExpendItemID);
    //         ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), Language.Get("OpenBoxTool", itemConfig.ItemName), (bool isOk) =>
    //         {
    //             if (isOk)
    //             {
    //                 if (!IsEnoughTools(chestsConfig.ExpendItemID, chestsConfig.ExpendCount * useCnt))
    //                 {
    //                     SysNotifyMgr.Instance.ShowTip("OpenBoxToolNoEnough", itemConfig.ItemName);
    //                     return;
    //                 }
    //                 else
    //                 {
    //                     CheckOpenMoney(chestsConfig, boxConfig, useCnt);
    //                 }
    //             }
    //         });
    //     }
    //     else
    //     {
    //         CheckOpenMoney(chestsConfig, boxConfig, useCnt);
    //     }
    // }
    // public void CheckOpenMoney(ChestsConfig chestsConfig, ItemConfig boxConfig, int useCnt)
    // {
    //     if (!IsEnoughMoney(chestsConfig.OpenMoney * useCnt))
    //     {
    //         SysNotifyMgr.Instance.ShowTip("BoxOpenCostMoney", 1);
    //         return;
    //     }
    //     else
    //     {
    //         if (chestsConfig.OpenMoney > 0)
    //         {
    //             ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), Language.Get("OpenBoxGold", chestsConfig.OpenMoney * useCnt), (bool isOk) =>
    //                 {
    //                     if (isOk)
    //                     {
    //                         CheckOtherCondi(chestsConfig, boxConfig, useCnt);
    //                     }
    //                 });
    //         }
    //         else
    //         {
    //             CheckOtherCondi(chestsConfig, boxConfig, useCnt);
    //         }
    //     }
    // }
    // public void CheckOtherCondi(ChestsConfig chestsConfig, ItemConfig boxConfig, int useCnt)
    // {
    //     if (boxConfig.MaxSkillCnt > 0 && GetUseCntByID(itemId) >= boxConfig.MaxSkillCnt)
    //     {
    //         SysNotifyMgr.Instance.ShowTip("UseCntLimit");
    //         return;
    //     }
    //     if (IsSelectItemByID(itemId))
    //     {
    //         UIManager.Instance.OpenWindow<ChooseItemsWin>();
    //         return;
    //     }
    //     ItemLogicUtility.Instance.UseItem(guid, useCnt);
    // }
    // public bool CheckOpenBoxCondition(int itemId, out bool isBox)
    // {
    //     isBox = false;
    //     ChestsConfig chestsConfig = ChestsConfig.Get(itemId);
    //     if (chestsConfig == null) return false;
    //     isBox = true;
    //     bool isCanOpen = true;
    //     ItemConfig boxConfig = ItemConfig.Get(itemId);
    //     if (PlayerDatas.Instance.baseData.LV < boxConfig.UseLV)
    //     {
    //         isCanOpen = false;
    //         return isCanOpen;
    //     }
    //     if (chestsConfig.ExpendItemID != 0)
    //     {
    //         ItemConfig itemConfig = ItemConfig.Get(chestsConfig.ExpendItemID);
    //         if (!IsEnoughTools(chestsConfig.ExpendItemID, chestsConfig.ExpendCount))
    //         {
    //             isCanOpen = false;
    //             return isCanOpen;
    //         }
    //     }
    //     if (!IsEnoughMoney(chestsConfig.OpenMoney))
    //     {
    //         isCanOpen = false;
    //         return isCanOpen;
    //     }
    //     if (boxConfig.MaxSkillCnt > 0 && GetUseCntByID(itemId) >= boxConfig.MaxSkillCnt)
    //     {
    //         isCanOpen = false;
    //         return isCanOpen;
    //     }
    //     return isCanOpen;
    // }
    // private bool IsEnoughMoney(int moneyCnt)
    // {
    //     ulong haveMoney = UIHelper.GetMoneyCnt(1);
    //     if (haveMoney >= (ulong)moneyCnt)
    //     {
    //         return true;
    //     }
    //     else
    //     {
    //         return false;
    //     }
    // }
    // private bool IsEnoughTools(int itemId, int toolCnt)
    // {
    //     int count = PackManager.Instance.GetItemCountByID(PackType.Item, itemId);
    //     if (count >= toolCnt)
    //     {
    //         return true;
    //     }
    //     else
    //     {
    //         return false;
    //     }
    // }
    // #endregion
    //宝箱预览物品 (随机获得)
    public List<Item> GetBoxItems(int boxID)
@@ -535,14 +320,6 @@
}
public class BoxGetItemInfo
{
    public int ItemID;
    public int Count;
    public int IsBind;
    public int IsSuite;
    public string UserData;
}
public class ChooseItems
{
Main/System/ItemTip/ItemBatchUseWin.cs
New file
@@ -0,0 +1,135 @@

using System;
using UnityEngine;
using UnityEngine.UI;
//批量使用物品
public class ItemBatchUseWin : UIBase
{
    [SerializeField] ItemCell itemCell;
    [SerializeField] Text itemCntTxt;
    [SerializeField] LongPressButton subBtn;
    [SerializeField] LongPressButton addBtn;
    [SerializeField] Text tipText;
    [SerializeField] Button okBtn;
    [SerializeField] Text titleText;
    public static Func<long, string> ShowTextEvent;
    public static int itemID;
    long curUseCount;
    long maxCount;
    protected override void InitComponent()
    {
        addBtn.SetListener(OnClickPlus);
        addBtn.onPress.AddListener(OnClickPlus);
        subBtn.SetListener(OnClickReduce);
        subBtn.onPress.AddListener(OnClickReduce);
        okBtn.AddListener(OnOK);
    }
    protected override void OnPreOpen()
    {
        var key = "UseItemTitle_" + itemID;
        if (LanguageConfig.HasKey(key))
        {
            titleText.text = Language.Get(key);
        }
        else
        {
            titleText.text = Language.Get("UseItemDefault");
        }
        maxCount = PackManager.Instance.GetItemCountByID(PackType.Item, itemID);
        curUseCount = maxCount > 0 ? 1 : 0;
        itemCell.Init(new ItemCellModel(itemID, false, curUseCount));
        itemCell.button.AddListener(() =>
        {
            ItemTipUtility.Show(itemID);
        });
        RefreshCount();
        RefreshBtn();
    }
    protected override void OnPreClose()
    {
    }
    void RefreshCount()
    {
        itemCntTxt.text = curUseCount + "/" + maxCount;
        itemCell.countText.text = curUseCount.ToString();
        if (ShowTextEvent != null)
        {
            tipText.text = ShowTextEvent(curUseCount);
        }
        else
        {
            tipText.text = "";
        }
    }
    void RefreshBtn()
    {
        if (curUseCount >= maxCount)
        {
            addBtn.interactable = false;
            addBtn.SetColorful(null, false);
        }
        else
        {
            addBtn.interactable = true;
            addBtn.SetColorful(null, true);
        }
        if (curUseCount == 0)
        {
            subBtn.interactable = false;
            subBtn.SetColorful(null, false);
        }
        else
        {
            subBtn.interactable = true;
            subBtn.SetColorful(null, true);
        }
    }
    void OnClickPlus()
    {
        if (curUseCount >= maxCount)
        {
            curUseCount = maxCount;
            return;
        }
        curUseCount++;
        RefreshCount();
        RefreshBtn();
    }
    void OnClickReduce()
    {
        if (curUseCount == 0)
            return;
        curUseCount--;
        RefreshCount();
        RefreshBtn();
    }
    void OnOK()
    {
        CloseWindow();
        if (ItemLogicUtility.CheckItemCount(PackType.Item, itemID, curUseCount, 2))
        {
            ItemLogicUtility.Instance.UseItem(PackManager.Instance.GetItemGUIDByID(itemID));
        }
    }
}
Main/System/ItemTip/ItemBatchUseWin.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 1d6f17e975427324cb877df073020301
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/ItemTip/ItemTipUtility.cs
@@ -46,15 +46,11 @@
        public bool isEquiped;
        public bool isPreview;
        public int star;
        public int strengthenLevel;
        public int score;
        public bool isOverdue;
        public int auctionSurplusTime;
        public int overdueSurplusTime;
        public int levelLimit;
        public int moneyLimit;
        public int evolveLevel;
    }
    public struct BaseProperty
@@ -64,78 +60,14 @@
        public List<Int2> starProperties;
    }
    public struct SpiritWeaponProperty
    {
        public int itemId;
        public List<Int3> properties;
    }
    public struct LegendProperty
    {
        public bool isPreview;
        public int itemId;
        public int trueCount;
        public List<Int2> properties;
        public int score;
    }
    //神装属性
    public struct ShenProperty
    {
        public bool isPreview;
        public int itemId;
        public List<Int3> properties;
    }
    public struct SuitInfo
    {
        public int job;
        public string name;
        public int level;
        public int maxSuitLevel;
        public List<int> places;
        public Dictionary<int, int> placeStars;
        // public Dictionary<int, EquipSuitPropertyEntry> twoSuitProperties;
        //  public Dictionary<int, EquipSuitPropertyEntry> fiveSuitProperties;
        public Dictionary<int, bool> eightSuits;
    }
    public struct StarInfo
    {
        public Int2 equipPosition;
        public int starLevel;
        public int maxLevel;
    }
    public struct StrengthenProperty
    {
        public int strengthenLevel;
        public List<Int2> properties;
        public int evolveLevel;
        public int equipPlace;
    }
    public struct GemInfo
    {
        public Dictionary<int, bool> activeStates;
        public Dictionary<int, int> gems;
    }
    public struct TrainProperty
    {
        public int level;
        public List<Int2> properties;
    }
    public struct SkillInfo
    {
        public List<int> skills;
    }
    public struct WingRefineMaterials
    {
        public List<Int2> materials;
    }
    public struct GetWay
    {
@@ -144,75 +76,16 @@
        public List<int> ways;
    }
    public struct CustomEquipInfo
    {
        public int job;
        public int itemId;
        public int score;
        public bool isEquiped;
        public List<Int2> legendProperties;
        public List<int> suitPlaces;
        public Dictionary<int, int> placeStars;
        // public Dictionary<EquipSuitType, int> suitLevels;
        public int strengthenLevel;
        public int starLevel;
        public List<Int2> trainProperties;
        public Dictionary<int, bool> gemHoleActiveStates;
        public Dictionary<int, int> gems;
        public List<int> equipSkillList;
        public int evolveLevel;
    }
    public struct CustomItemPlus
    {
        public int ItemID;
        public int count;
        public int Equipped;
        public int Preview;
        public int Star;
        public int PlusLV;
        public int EvolveLV;
        public string UserData;
        public int[] Stone;
        public CustomEquipWash Wash;
        public int[][] Equips;
        public int[] suitPlaces;
        public int[] suitLevels;
        public int[] placeStars;
    }
    public struct CustomEquipWash
    {
        public int LV;
        public int[] Value;
    }
    public struct ItemViewInfo
    {
        public int itemId;
        public bool compare;
        public bool unfoldGetWay;
        public bool isAuctionEquip;
        public LegendProperty legendProperty;
        public int score;
        public int appointID; //定制装备
    }
    // static PackModel packModel { get { return ModelCenter.Instance.GetModel<PackModel>(); } }
    // static EquipModel equipModel { get { return ModelCenter.Instance.GetModel<EquipModel>(); } }
    // static EquipStarModel starModel { get { return ModelCenter.Instance.GetModel<EquipStarModel>(); } }
    // static EquipGemModel gemModel { get { return ModelCenter.Instance.GetModel<EquipGemModel>(); } }
    // static EquipTrainModel trainModel { get { return ModelCenter.Instance.GetModel<EquipTrainModel>(); } }
    // static EquipStrengthModel strengthenModel { get { return ModelCenter.Instance.GetModel<EquipStrengthModel>(); } }
    // static MountModel mountModel { get { return ModelCenter.Instance.GetModel<MountModel>(); } }
    // static PetModel petModel { get { return ModelCenter.Instance.GetModel<PetModel>(); } }
    // static ComposeWinModel composeModel { get { return ModelCenter.Instance.GetModel<ComposeWinModel>(); } }
    // static StoreModel storeModel { get { return ModelCenter.Instance.GetModel<StoreModel>(); } }
    // static VirtualPackModel virtualPackModel { get { return ModelCenter.Instance.GetModel<VirtualPackModel>(); } }
    // static ItemOverdueModel itemOverdueModel { get { return ModelCenter.Instance.GetModel<ItemOverdueModel>(); } }
    // static BoxGetItemModel boxGetItemModel { get { return ModelCenter.Instance.GetModel<BoxGetItemModel>(); } }
    public static TipData mainTipData { get; private set; }     // 注意当递进点击打开多个tip界面会变更数据,不能依赖此值
    public static TipData secondaryData { get; private set; }
@@ -395,304 +268,6 @@
    }
    // public static void ShowCustomEquip(CustomEquipInfo info)
    // {
    //     secondaryData = null;
    //     mainTipData = CreateCustomEquipData(info);
    //     WindowCenter.Instance.Open<EquipTipWin>();
    // }
    // static TipData CreateNormalEquipData(string guid)
    // {
    //     var item = PackManager.Instance.GetItemByGuid(guid);
    //     if (item == null)
    //     {
    //         return default(TipData);
    //     }
    //     return new TipData()
    //     {
    //         itemId = item.itemId,
    //         guid = guid,
    //         baseInfo = GetBaseInfo(guid),
    //         baseProperty = GetBaseProperty(guid),
    //         spiritWeaponProperty = GetSpiritWeaponProperty(item.itemId),
    //         legendProperty = GetLegendProperty(guid),
    //         skillInfo = GetSkillInfo(item.itemId, guid),
    //         suitInfo = GetSuitInfo(guid),
    //         starInfo = GetStarInfo(guid),
    //         strengthenProperty = GetStrengthenProperty(guid),
    //         gemInfo = GetGemInfo(guid),
    //         trainProperty = GetTrainProperty(guid),
    //         operates = operatable ? GetOperates(guid) : null,
    //         shenProperty = GetShenProperty(item.itemId)
    //     };
    // }
    // static TipData CreateNormalEquipData(int itemId)
    // {
    //     return new TipData()
    //     {
    //         itemId = itemId,
    //         guid = string.Empty,
    //         baseInfo = GetBaseInfo(itemId),
    //         baseProperty = GetBaseProperty(itemId),
    //         legendProperty = GetLegendProperty(itemId),
    //         spiritWeaponProperty = GetSpiritWeaponProperty(itemId),
    //         skillInfo = GetSkillInfo(itemId),
    //         suitInfo = GetSuitInfo(itemId),
    //         gemInfo = GetGemInfo(itemId),
    //         starInfo = GetStarInfo(itemId),
    //         getWay = GetGetWay(itemId),
    //         shenProperty = GetShenProperty(itemId)
    //     };
    // }
    // static TipData CreateDogzEquipData(string guid)
    // {
    //     var item = packModel.GetItemByGuid(guid);
    //     if (item == null)
    //     {
    //         return default(TipData);
    //     }
    //     return new TipData()
    //     {
    //         itemId = item.itemId,
    //         guid = guid,
    //         baseInfo = GetBaseInfo(guid),
    //         baseProperty = GetBaseProperty(guid),
    //         legendProperty = GetLegendProperty(guid),
    //         operates = GetOperates(guid),
    //     };
    // }
    // static TipData CreateDogzEquipData(int itemId)
    // {
    //     return new TipData()
    //     {
    //         itemId = itemId,
    //         guid = string.Empty,
    //         baseInfo = GetBaseInfo(itemId),
    //         baseProperty = GetBaseProperty(itemId),
    //         legendProperty = GetLegendProperty(itemId),
    //         getWay = GetGetWay(itemId)
    //     };
    // }
    // static TipData CreateCustomEquipData(CustomEquipInfo info)
    // {
    //     var config = ItemConfig.Get(info.itemId);
    //     if (config == null)
    //     {
    //         return default(TipData);
    //     }
    //     var baseInfo = new BaseInfo()
    //     {
    //         itemId = info.itemId,
    //         star = info.starLevel,
    //         strengthenLevel = info.strengthenLevel,
    //         score = info.score,
    //         isEquiped = info.isEquiped,
    //         evolveLevel = info.evolveLevel,
    //     };
    //     var baseProperty = GetBaseProperty(info.itemId);
    //     if (info.starLevel > 0)
    //     {
    //         var starProperties = new List<Int2>();
    //         baseProperty.star = info.starLevel;
    //         var starConfig = EquipStarConfig.Get(config.LV, config.EquipPlace, info.starLevel);
    //         starProperties.AddRange(starConfig.BaseAttrInfo);
    //         baseProperty.starProperties = starProperties;
    //     }
    //     var legendProperty = new LegendProperty()
    //     {
    //         properties = info.legendProperties,
    //     };
    //     var skillInfo = GetSkillInfo(info.itemId, info);
    //     var suitInfo = default(SuitInfo);
    //     if (ItemLogicUtility.Instance.IsSuitEquip(info.itemId))
    //     {
    //         var job = config.JobLimit;
    //         var twoConfigs = EquipSuitConfig.GetConfigs(job, config.LV, EquipSuitType.TwoSuit);
    //         var name = twoConfigs[0].name;
    //         var level = config.LV;
    //         var maxSuitLevel = EquipStarModel.GetMaxStarLevel(level);
    //         var twoSuitProperties = new Dictionary<int, EquipSuitPropertyEntry>();
    //         var fiveSuitProperties = new Dictionary<int, EquipSuitPropertyEntry>();
    //         var eightSuits = new Dictionary<int, bool>();
    //         var eightSuitLevel = info.suitLevels[EquipSuitType.EightSuit];
    //         for (var i = 0; i <= 9; i++, i++, i++)
    //         {
    //             var configs = EquipSuitConfig.GetConfigs(job, level, EquipSuitType.TwoSuit);
    //             var actived = info.suitLevels[EquipSuitType.TwoSuit] >= i;
    //             var properties = new List<Int2>();
    //             foreach (var item in configs)
    //             {
    //                 if (item.star == i)
    //                 {
    //                     properties.AddRange(item.attr);
    //                     break;
    //                 }
    //             }
    //             twoSuitProperties[i] = new EquipSuitPropertyEntry()
    //             {
    //                 type = EquipSuitType.TwoSuit,
    //                 actived = actived,
    //                 properties = properties,
    //             };
    //             configs = EquipSuitConfig.GetConfigs(job, level, EquipSuitType.FiveSuit);
    //             actived = info.suitLevels[EquipSuitType.FiveSuit] >= i;
    //             properties = new List<Int2>();
    //             foreach (var item in configs)
    //             {
    //                 if (item.star == i)
    //                 {
    //                     properties.AddRange(item.attr);
    //                     break;
    //                 }
    //             }
    //             fiveSuitProperties[i] = new EquipSuitPropertyEntry()
    //             {
    //                 type = EquipSuitType.TwoSuit,
    //                 actived = actived,
    //                 properties = properties,
    //             };
    //             eightSuits[i] = eightSuitLevel >= i;
    //         }
    //         suitInfo = new SuitInfo()
    //         {
    //             name = name,
    //             level = level,
    //             job = job,
    //             maxSuitLevel = maxSuitLevel,
    //             places = info.suitPlaces,
    //             placeStars = info.placeStars,
    //             twoSuitProperties = twoSuitProperties,
    //             fiveSuitProperties = fiveSuitProperties,
    //             eightSuits = eightSuits
    //         };
    //     }
    //     var starInfo = new StarInfo()
    //     {
    //         equipPosition = new Int2(config.LV, config.EquipPlace),
    //         starLevel = info.starLevel,
    //         maxLevel = config.LV == 0 ? 0 : EquipStarModel.GetMaxStarLevel(config.ItemColor, config.LV),
    //     };
    //     var type = EquipStrengthModel.GetEquipStrengthType(config.EquipPlace);
    //     var strengthenConfig = ItemPlusConfig.GetTypeAndLevel(type, info.strengthenLevel);
    //     var strengthenProperties = new List<Int2>();
    //     for (int i = 0; i < strengthenConfig.attType.Length; i++)
    //     {
    //         strengthenProperties.Add(new Int2(strengthenConfig.attType[i], strengthenConfig.attValue[i]));
    //     }
    //     var strengthenProperty = new StrengthenProperty()
    //     {
    //         strengthenLevel = info.strengthenLevel,
    //         properties = strengthenProperties,
    //         equipPlace = config.EquipPlace,
    //         evolveLevel = info.evolveLevel,
    //     };
    //     var gemInfo = new GemInfo()
    //     {
    //         activeStates = info.gemHoleActiveStates,
    //         gems = info.gems,
    //     };
    //     var trainProperty = new TrainProperty()
    //     {
    //         properties = info.trainProperties,
    //     };
    //     return new TipData()
    //     {
    //         itemId = info.itemId,
    //         baseInfo = baseInfo,
    //         baseProperty = baseProperty,
    //         legendProperty = legendProperty,
    //         skillInfo = skillInfo,
    //         suitInfo = suitInfo,
    //         starInfo = starInfo,
    //         strengthenProperty = strengthenProperty,
    //         gemInfo = gemInfo,
    //         trainProperty = trainProperty,
    //         shenProperty = GetShenProperty(info.itemId)
    //     };
    // }
    static TipData CreateGoodEquipData(int itemId, int goodId)
    {
        return new TipData()
        {
            itemId = itemId,
            guid = string.Empty,
            goodId = goodId,
            baseInfo = GetBaseInfo(itemId),
            baseProperty = GetBaseProperty(itemId),
            //spiritWeaponProperty = GetSpiritWeaponProperty(itemId),
            //legendProperty = GetLegendProperty(itemId),
            skillInfo = GetSkillInfo(itemId),
            //suitInfo = GetSuitInfo(itemId),
            //gemInfo = GetGemInfo(itemId),
            //starInfo = GetStarInfo(itemId),
            // operates = GetGoodOperates(goodId),
            //shenProperty = GetShenProperty(itemId)
        };
    }
    // static TipData CreateEquipAuctionData(string guid, bool operatable)
    // {
    //     var item = packModel.GetItemByGuid(guid);
    //     if (item == null)
    //     {
    //         return default(TipData);
    //     }
    //     var legendProperty = GetLegendProperty(guid);
    //     if (legendProperty.properties.IsNullOrEmpty())
    //     {
    //         legendProperty = GetLegendProperty(item.itemId);
    //     }
    //     return new TipData()
    //     {
    //         itemId = item.itemId,
    //         guid = guid,
    //         baseInfo = GetBaseInfo(guid),
    //         baseProperty = GetBaseProperty(item.itemId),
    //         spiritWeaponProperty = GetSpiritWeaponProperty(item.itemId),
    //         legendProperty = legendProperty,
    //         skillInfo = GetSkillInfo(item.itemId, guid),
    //         suitInfo = GetSuitInfo(item.itemId),
    //         operates = operatable ? GetOperates(guid) : null,
    //         starInfo = GetStarInfo(guid),
    //         gemInfo = GetGemInfo(guid),
    //         shenProperty = GetShenProperty(item.itemId)
    //     };
    // }
    static TipData CreateItemData(string guid)
    {
@@ -709,12 +284,6 @@
            baseInfo = GetBaseInfo(guid),
            baseProperty = GetBaseProperty(item.itemId),
            // spiritWeaponProperty = GetSpiritWeaponProperty(item.itemId),
            // legendProperty = GetLegendProperty(guid),
            // petMountBaseProperty = GetPetMountBaseProperty(item.itemId),
            // operates = operatable ? GetOperates(guid) : null,
            // refineMaterials = GetWingRefineMaterials(guid),
            // shenProperty = GetShenProperty(item.itemId)
        };
    }
@@ -724,113 +293,10 @@
        {
            itemId = itemId,
            baseInfo = GetBaseInfo(itemId),
            // baseProperty = GetBaseProperty(itemId),
            exchangeItemId = itemId,
            // spiritWeaponProperty = GetSpiritWeaponProperty(itemId),
            // legendProperty = GetLegendProperty(itemId),
            // petMountBaseProperty = GetPetMountBaseProperty(itemId),
            // getWay = GetGetWay(itemId),
            // shenProperty = GetShenProperty(itemId)
        };
    }
    static TipData CreateGoodItemData(int itemId, int goodId)
    {
        return new TipData()
        {
            itemId = itemId,
            goodId = goodId,
            baseInfo = GetBaseInfo(itemId),
            baseProperty = GetBaseProperty(itemId),
            // legendProperty = GetLegendProperty(itemId),
            // spiritWeaponProperty = GetSpiritWeaponProperty(itemId),
            // petMountBaseProperty = GetPetMountBaseProperty(itemId),
            // operates = GetGoodOperates(goodId),
            // shenProperty = GetShenProperty(itemId)
        };
    }
    // public static void Operate(ItemOperateType type, string guid)
    // {
    //     switch (type)
    //     {
    //         case ItemOperateType.putOn:
    //             ItemOperateUtility.Instance.PutOnItem(guid);
    //             break;
    //         case ItemOperateType.gotoPuton:
    //             ItemOperateUtility.Instance.PutOnItem(guid);
    //             break;
    //         case ItemOperateType.putOff:
    //             ItemOperateUtility.Instance.PutOffEquip(guid);
    //             break;
    //         case ItemOperateType.putAway:
    //             ItemOperateUtility.Instance.PutAway(guid);
    //             break;
    //         case ItemOperateType.putIn:
    //             ItemOperateUtility.Instance.PutInWareHouse(guid);
    //             break;
    //         case ItemOperateType.putOut:
    //             ItemOperateUtility.Instance.TakeOutFromWarehouse(guid);
    //             break;
    //         case ItemOperateType.sell:
    //             ItemOperateUtility.Instance.SellItem(guid);
    //             break;
    //         case ItemOperateType.strength:
    //             ItemOperateUtility.Instance.GotoStrengthen(guid);
    //             break;
    //         case ItemOperateType.star:
    //             ItemOperateUtility.Instance.GotoStarUpgrade(guid);
    //             break;
    //         case ItemOperateType.inlay:
    //             ItemOperateUtility.Instance.GotoInlayItem(guid);
    //             break;
    //         case ItemOperateType.train:
    //             ItemOperateUtility.Instance.GotoTrain(guid);
    //             break;
    //         case ItemOperateType.makeUse:
    //             ItemOperateUtility.Instance.GotoUseItem(guid);
    //             break;
    //         case ItemOperateType.split:
    //             ItemOperateUtility.Instance.OnClickSplitBtn(guid);
    //             break;
    //         case ItemOperateType.compose:
    //             var wannaComposeItem = packModel.GetItemByGuid(guid);
    //             var jumpId = 0;
    //             var isUnlock = composeModel.CheckComposeItemById(wannaComposeItem.itemId, out jumpId);
    //             if (isUnlock)
    //             {
    //                 ItemOperateUtility.Instance.GotoComposeItem(jumpId);
    //             }
    //             break;
    //         case ItemOperateType.renewal:
    //             ItemOperateUtility.Instance.RenewalItem(guid);
    //             break;
    //         case ItemOperateType.exchange:
    //             WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.ExchangeActiveToken);
    //             break;
    //         case ItemOperateType.lsExchange:
    //             WindowCenter.Instance.Open<LingShiChange>();
    //             break;
    //         case ItemOperateType.default1:
    //             var item = packModel.GetItemByGuid(guid);
    //             if (item == null)
    //             {
    //                 break;
    //             }
    //             EquipEvolveModel.Instance.EquipJump(item.config.LV, item.config.EquipPlace);
    //             WindowJumpMgr.Instance.WindowJumpTo((JumpUIType)2013);
    //             break;
    //     }
    // }
    // public static void GoodOperate(ItemOperateType type, int goodId, int count)
    // {
    //     var config = StoreConfig.Get(goodId);
    //     storeModel.SendBuyShopItem(config, count);
    // }
    private static BaseInfo GetBaseInfo(int itemId)
@@ -849,7 +315,6 @@
            isAuction = false,
            isEquiped = false,
            isPreview = true,
            //score = ItemLogicUtility.Instance.GetEquipScore(itemId, null, true),
            auctionSurplusTime = 0,
            levelLimit = config.UseLV,
            moneyLimit = money,
@@ -861,23 +326,8 @@
    private static BaseInfo GetBaseInfo(string guid)
    {
        var item = PackManager.Instance.GetItemByGuid(guid);
        var level = item.config.LV;
        var place = item.config.EquipPlace;
        var isEquiped = false;// equipModel.GetEquip(new Int2(level, place)) == guid;
        // var type = EquipStrengthModel.GetEquipStrengthType(place);
        var star = 0; //starModel.GetEquipStarLevel(new Int2(level, place));
        var maxStrengthenLevel = 0; //strengthenModel.GetEquipLevelMax(type, level);
        var placeStrengthenLevel = 0;   //strengthenModel.GetStrengthLevel(level, place);
        var money = 0;
        // if (item.config.Type == 81)
        // {
        //     var chestConfig = ChestsConfig.Get(item.itemId);
        //     money = chestConfig.OpenMoney;
        // }
        var baseInfo = new BaseInfo()
        {
@@ -890,8 +340,6 @@
            auctionSurplusTime = item.isAuction ? item.auctionSurplusTime : 0,
            overdueSurplusTime = item.overdueSurplusTime,
            levelLimit = item.isAuction ? 0 : item.config.UseLV,
            star = isEquiped ? star : -1,
            strengthenLevel = isEquiped ? Mathf.Min(placeStrengthenLevel, maxStrengthenLevel) : 0,
            moneyLimit = money,
        };
@@ -908,13 +356,6 @@
            return GetBaseProperty(config.EffectValueA1);
        }
        if (!ItemLogicUtility.Instance.IsDogzEquip(itemId))
        {
            if (config.Effect1 != 0)
            {
                baseProperties.Add(new Int2(config.Effect1, config.EffectValueA1));
            }
        }
        if (config.Effect2 != 0)
        {
@@ -955,651 +396,11 @@
        if (equiped)
        {
            var starProperties = new List<Int2>();
            // var currentStar = starModel.GetEquipStarLevel(equipPosition);
            // var maxStar = EquipStarModel.GetMaxStarLevel(item.config.ItemColor, item.config.LV);
            // var star = Mathf.Min(currentStar, maxStar);
            // if (star > 0)
            // {
            //     baseProperty.star = star;
            //     var starConfig = EquipStarConfig.Get(item.config.LV, item.config.EquipPlace, star);
            //     starProperties.AddRange(starConfig.BaseAttrInfo);
            // }
            baseProperty.starProperties = starProperties;
        }
        return baseProperty;
    }
    // private static BaseProperty GetPetMountBaseProperty(int itemId)
    // {
    //     var config = ItemConfig.Get(itemId);
    //     var baseProperty = new BaseProperty();
    //     Dictionary<int, int> properties = null;
    //     switch (config.Type)
    //     {
    //         case 26:
    //             var petId = PetInfoConfig.GetItemUnLockPet(itemId);
    //             properties = petModel.GetPetAttrAddDict(petId);
    //             break;
    //         case 41:
    //         case 42:
    //             var horseId = HorseConfig.GetItemUnLockHorse(itemId);
    //             properties = mountModel.GetMountAttrAddDict(horseId);
    //             break;
    //         default:
    //             break;
    //     }
    //     if (properties != null)
    //     {
    //         baseProperty.baseProperties = new List<Int2>();
    //         foreach (var property in properties)
    //         {
    //             baseProperty.baseProperties.Add(new Int2(property.Key, property.Value));
    //         }
    //     }
    //     return baseProperty;
    // }
    // //神装属性
    // private static ShenProperty GetShenProperty(int itemId)
    // {
    //     var data = new ShenProperty();
    //     data.isPreview = true;
    //     data.itemId = itemId;
    //     var config = ItemConfig.Get(itemId);
    //     data.properties = ShenPropertyUtility.GetEquipShenProperties(itemId);
    //     return data;
    // }
    // private static LegendProperty GetLegendProperty(int itemId)
    // {
    //     var data = new LegendProperty();
    //     data.isPreview = true;
    //     data.itemId = itemId;
    //     var config = ItemConfig.Get(itemId);
    //     if (config.Effect1 == 220)
    //     {
    //         data.isPreview = false;
    //         var appConfig = AppointItemConfig.Get(itemId);
    //         data.trueCount = 0;
    //         data.properties = new List<Int2>();
    //         for (var i = 0; i < appConfig.LegendAttrID.Length; i++)
    //         {
    //             data.properties.Add(new Int2(appConfig.LegendAttrID[i], appConfig.LegendAttrValue[i]));
    //         }
    //     }
    //     else
    //     {
    //         data.properties = LegendPropertyUtility.GetLegendProFromEquipShen(itemId);
    //         if (data.properties != null)
    //         {
    //             data.trueCount = 0;
    //             data.isPreview = false;
    //         }
    //         else
    //         {
    //             data.trueCount = LegendPropertyUtility.GetEquipPropertyCount(itemId);
    //             data.properties = LegendPropertyUtility.GetEquipProperties(itemId);
    //         }
    //     }
    //     return data;
    // }
    // private static SpiritWeaponProperty GetSpiritWeaponProperty(int itemId)
    // {
    //     var config = SpiritWeaponConfig.Get(itemId);
    //     if (config == null)
    //     {
    //         return default(SpiritWeaponProperty);
    //     }
    //     var properties = new List<Int3>();
    //     for (var i = 0; i < config.AttrIDList.Length; i++)
    //     {
    //         properties.Add(new Int3(config.AttrIDList[i], config.AttrValueList[i], config.AttrColorList[i]));
    //     }
    //     var spiritWeaponProperty = new SpiritWeaponProperty();
    //     spiritWeaponProperty.itemId = itemId;
    //     spiritWeaponProperty.properties = properties;
    //     return spiritWeaponProperty;
    // }
    // private static LegendProperty GetLegendProperty(string guid)
    // {
    //     var item = packModel.GetItemByGuid(guid);
    //     if (item == null)
    //     {
    //         return default(LegendProperty);
    //     }
    //     var data = new LegendProperty();
    //     data.isPreview = false;
    //     data.itemId = item.itemId;
    //     var ids = item.GetUseData((int)ItemUseDataKey.legendAttrID);
    //     var values = item.GetUseData((int)ItemUseDataKey.legendAttrValue);
    //     if (!ids.IsNullOrEmpty() && !values.IsNullOrEmpty())
    //     {
    //         var properties = new List<Int2>();
    //         var count = Mathf.Min(ids.Count, values.Count);
    //         for (int i = 0; i < count; i++)
    //         {
    //             properties.Add(new Int2(ids[i], values[i]));
    //         }
    //         data.properties = properties;
    //     }
    //     return data;
    // }
    public static LegendProperty GetLegendProperty(int itemId, Dictionary<int, List<int>> userData)
    {
        var data = new LegendProperty();
        data.isPreview = false;
        data.itemId = itemId;
        List<int> ids = null;
        List<int> values = null;
        if (userData != null)
        {
            userData.TryGetValue((int)ItemUseDataKey.legendAttrID, out ids);
            userData.TryGetValue((int)ItemUseDataKey.legendAttrValue, out values);
        }
        if (!ids.IsNullOrEmpty() && !values.IsNullOrEmpty())
        {
            var properties = new List<Int2>();
            var count = Mathf.Min(ids.Count, values.Count);
            for (int i = 0; i < count; i++)
            {
                properties.Add(new Int2(ids[i], values[i]));
            }
            data.properties = properties;
        }
        return data;
    }
    // public static SuitInfo GetSuitInfo(int itemId)
    // {
    //     var config = ItemConfig.Get(itemId);
    //     if (config == null || config.SuiteiD <= 0)
    //     {
    //         return default(SuitInfo);
    //     }
    //     var job = config.JobLimit;
    //     var twoConfigs = EquipSuitConfig.GetConfigs(job, config.LV, EquipSuitType.TwoSuit);
    //     var name = twoConfigs[0].name;
    //     var level = config.LV;
    //     var places = new List<int>();
    //     places.Add(config.EquipPlace);
    //     //var suitInfo = new SuitInfo()
    //     //{
    //     //    name = name,
    //     //    level = level,
    //     //    job = job,
    //     //    places = places,
    //     //};
    //     var maxSuitLevel = EquipStarModel.GetMaxStarLevel(level);
    //     var placeStars = new Dictionary<int, int>();
    //     for (int i = 1; i <= 8; i++)
    //     {
    //         var equip = packModel.GetItemByGuid(equipModel.GetEquip(new Int2(level, i)));
    //         var hasSuit = equip != null && equip.config.SuiteiD > 0;
    //         if (hasSuit)
    //         {
    //             placeStars[i] = starModel.GetEquipStarLevel(new Int2(level, i));
    //         }
    //     }
    //     var twoSuitProperties = new Dictionary<int, EquipSuitPropertyEntry>();
    //     var fiveSuitProperties = new Dictionary<int, EquipSuitPropertyEntry>();
    //     var eightSuits = new Dictionary<int, bool>();
    //     var eightSuitLevel = equipModel.GetSuitLevel(config.LV, EquipSuitType.EightSuit);
    //     var twoSuitProperties0 = equipModel.GetEquipSuitEntry(config.LV, 0, EquipSuitType.TwoSuit);
    //     var fiveSuitProperties0 = equipModel.GetEquipSuitEntry(config.LV, 0, EquipSuitType.FiveSuit);
    //     twoSuitProperties[0] = twoSuitProperties0;
    //     fiveSuitProperties[0] = fiveSuitProperties0;
    //     eightSuits[0] = eightSuitLevel >= 0;
    //     if (maxSuitLevel >= 3)
    //     {
    //         twoSuitProperties[3] = equipModel.GetEquipSuitEntry(config.LV, 3, EquipSuitType.TwoSuit);
    //         fiveSuitProperties[3] = equipModel.GetEquipSuitEntry(config.LV, 3, EquipSuitType.FiveSuit);
    //         eightSuits[3] = eightSuitLevel >= 3;
    //     }
    //     if (maxSuitLevel >= 6)
    //     {
    //         twoSuitProperties[6] = equipModel.GetEquipSuitEntry(config.LV, 6, EquipSuitType.TwoSuit);
    //         fiveSuitProperties[6] = equipModel.GetEquipSuitEntry(config.LV, 6, EquipSuitType.FiveSuit);
    //         eightSuits[6] = eightSuitLevel >= 3;
    //     }
    //     if (maxSuitLevel >= 9)
    //     {
    //         twoSuitProperties[9] = equipModel.GetEquipSuitEntry(config.LV, 9, EquipSuitType.TwoSuit);
    //         fiveSuitProperties[9] = equipModel.GetEquipSuitEntry(config.LV, 9, EquipSuitType.FiveSuit);
    //         eightSuits[9] = eightSuitLevel >= 9;
    //     }
    //     var suitInfo = new SuitInfo()
    //     {
    //         name = name,
    //         level = level,
    //         job = job,
    //         maxSuitLevel = maxSuitLevel,
    //         places = places,
    //         placeStars = placeStars,
    //         twoSuitProperties = twoSuitProperties,
    //         fiveSuitProperties = fiveSuitProperties,
    //         eightSuits = eightSuits
    //     };
    //     return suitInfo;
    // }
    // private static SuitInfo GetSuitInfo(string guid)
    // {
    //     var item = packModel.GetItemByGuid(guid);
    //     if (item == null)
    //     {
    //         return default(SuitInfo);
    //     }
    //     var config = ItemConfig.Get(item.itemId);
    //     if (config == null || config.SuiteiD <= 0)
    //     {
    //         return default(SuitInfo);
    //     }
    //     var equipPosition = new Int2(item.config.LV, item.config.EquipPlace);
    //     var equiped = equipModel.GetEquip(equipPosition) == guid;
    //     var job = config.JobLimit;
    //     var twoConfigs = EquipSuitConfig.GetConfigs(job, config.LV, EquipSuitType.TwoSuit);
    //     var name = twoConfigs[0].name;
    //     var level = config.LV;
    //     var maxSuitLevel = equiped ? EquipStarModel.GetMaxStarLevel(level) : -1;
    //     var places = new List<int>();
    //     var placeStars = new Dictionary<int, int>();
    //     if (equiped)
    //     {
    //         for (int i = 1; i <= 8; i++)
    //         {
    //             var equip = packModel.GetItemByGuid(equipModel.GetEquip(new Int2(level, i)));
    //             var hasSuit = equip != null && equip.config.SuiteiD > 0;
    //             if (hasSuit)
    //             {
    //                 places.Add(i);
    //                 placeStars[i] = starModel.GetEquipStarLevel(new Int2(level, i));
    //             }
    //         }
    //     }
    //     var twoSuitProperties = new Dictionary<int, EquipSuitPropertyEntry>();
    //     var fiveSuitProperties = new Dictionary<int, EquipSuitPropertyEntry>();
    //     var eightSuits = new Dictionary<int, bool>();
    //     var eightSuitLevel = equiped ? equipModel.GetSuitLevel(config.LV, EquipSuitType.EightSuit) : -1;
    //     if (!equiped)
    //     {
    //         var suit2 = equipModel.GetEquipSuitEntry(config.LV, 0, EquipSuitType.TwoSuit);
    //         suit2.actived = false;
    //         var suit5 = equipModel.GetEquipSuitEntry(config.LV, 0, EquipSuitType.FiveSuit);
    //         suit5.actived = false;
    //         twoSuitProperties[0] = suit2;
    //         fiveSuitProperties[0] = suit5;
    //         eightSuits[0] = eightSuitLevel >= 0;
    //     }
    //     else
    //     {
    //         foreach (var star in EquipStarModel.StarList)
    //         {
    //             if (maxSuitLevel >= star)
    //             {
    //                 twoSuitProperties[star] = equipModel.GetEquipSuitEntry(config.LV, star, EquipSuitType.TwoSuit);
    //                 fiveSuitProperties[star] = equipModel.GetEquipSuitEntry(config.LV, star, EquipSuitType.FiveSuit);
    //                 eightSuits[star] = eightSuitLevel >= star;
    //             }
    //         }
    //     }
    //     var suitInfo = new SuitInfo()
    //     {
    //         name = name,
    //         level = level,
    //         job = job,
    //         maxSuitLevel = maxSuitLevel,
    //         places = places,
    //         placeStars = placeStars,
    //         twoSuitProperties = twoSuitProperties,
    //         fiveSuitProperties = fiveSuitProperties,
    //         eightSuits = eightSuits
    //     };
    //     return suitInfo;
    // }
    // private static StarInfo GetStarInfo(int itemId)
    // {
    //     var config = ItemConfig.Get(itemId);
    //     if (!EquipModel.IsRealmEquip(config.EquipPlace))
    //     {
    //         return default(StarInfo);
    //     }
    //     var starInfo = new StarInfo();
    //     starInfo.equipPosition = new Int2(config.LV, config.EquipPlace);
    //     starInfo.maxLevel = EquipStarModel.GetMaxStarLevel(config.ItemColor, config.LV);
    //     starInfo.starLevel = 0;
    //     return starInfo;
    // }
    // private static StarInfo GetStarInfo(string guid)
    // {
    //     var item = packModel.GetItemByGuid(guid);
    //     if (item == null)
    //     {
    //         return default(StarInfo);
    //     }
    //     if (!EquipModel.IsRealmEquip(item.config.EquipPlace))
    //     {
    //         return default(StarInfo);
    //     }
    //     var starInfo = new StarInfo();
    //     var equipPosition = new Int2(item.config.LV, item.config.EquipPlace);
    //     var equiped = equipModel.GetEquip(equipPosition) == guid;
    //     starInfo.equipPosition = equipPosition;
    //     starInfo.maxLevel = EquipStarModel.GetMaxStarLevel(item.config.ItemColor, item.config.LV);
    //     starInfo.starLevel = equiped ? starModel.GetStarLevel(equipPosition) : 0;
    //     return starInfo;
    // }
    // private static StrengthenProperty GetStrengthenProperty(string guid)
    // {
    //     var item = packModel.GetItemByGuid(guid);
    //     if (item == null)
    //     {
    //         return default(StrengthenProperty);
    //     }
    //     var level = item.config.LV;
    //     var place = item.config.EquipPlace;
    //     var equiped = equipModel.GetEquip(new Int2(level, place)) == guid;
    //     if (!equiped)
    //     {
    //         return default(StrengthenProperty);
    //     }
    //     var data = new StrengthenProperty();
    //     var strengthenLevel = strengthenModel.GetStrengthLevel(level, place);
    //     var type = EquipStrengthModel.GetEquipStrengthType(place);
    //     var maxStrengthenLevel = strengthenModel.GetEquipLevelMax(type, level);
    //     data.strengthenLevel = Mathf.Min(strengthenLevel, maxStrengthenLevel);
    //     data.evolveLevel = strengthenModel.GetStrengthEvolveLevel(level, place);
    //     data.equipPlace = place;
    //     data.properties = new List<Int2>();
    //     var config = ItemPlusConfig.GetTypeAndLevel(type, data.strengthenLevel);
    //     for (int i = 0; i < config.attType.Length; i++)
    //     {
    //         data.properties.Add(new Int2(config.attType[i], config.attValue[i]));
    //     }
    //     return data;
    // }
    // private static GemInfo GetGemInfo(int itemId)
    // {
    //     var config = ItemConfig.Get(itemId);
    //     var level = config.LV;
    //     var place = config.EquipPlace;
    //     var gemInfo = new GemInfo();
    //     var maxStar = EquipStarModel.GetMaxStarLevel(config.ItemColor, config.LV);
    //     gemInfo.activeStates = new Dictionary<int, bool>();
    //     for (int i = 0; i < 4; i++)
    //     {
    //         gemInfo.activeStates[i] = IsEquipGemHoleOpen(new Int2(level, place), maxStar, i);
    //     }
    //     return gemInfo;
    // }
    // private static GemInfo GetGemInfo(string guid)
    // {
    //     var item = packModel.GetItemByGuid(guid);
    //     if (item == null)
    //     {
    //         return default(GemInfo);
    //     }
    //     var level = item.config.LV;
    //     var place = item.config.EquipPlace;
    //     var gemInfo = new GemInfo();
    //     var maxStar = EquipStarModel.GetMaxStarLevel(item.config.ItemColor, item.config.LV);
    //     gemInfo.activeStates = new Dictionary<int, bool>();
    //     for (int i = 0; i < 4; i++)
    //     {
    //         gemInfo.activeStates[i] = IsEquipGemHoleOpen(new Int2(level, place), maxStar, i);
    //     }
    //     gemInfo.gems = new Dictionary<int, int>();
    //     if (item.packType == PackType.Equip)
    //     {
    //         int[] gems;
    //         if (gemModel.TryGetEquipGems(item.config.LV, item.config.EquipPlace, out gems))
    //         {
    //             for (int i = 0; i < gems.Length; i++)
    //             {
    //                 gemInfo.gems[i] = gems[i];
    //             }
    //         }
    //     }
    //     return gemInfo;
    // }
    // private static TrainProperty GetTrainProperty(string guid)
    // {
    //     var item = packModel.GetItemByGuid(guid);
    //     if (item == null)
    //     {
    //         return default(TrainProperty);
    //     }
    //     var equipPosition = new Int2(item.config.LV, item.config.EquipPlace);
    //     var equiped = equipModel.GetEquip(equipPosition) == guid;
    //     if (!equiped)
    //     {
    //         return default(TrainProperty);
    //     }
    //     var trainProperty = new TrainProperty();
    //     var star = Mathf.Min(EquipStarModel.GetMaxStarLevel(item.config.ItemColor, item.config.LV), starModel.GetEquipStarLevel(equipPosition));
    //     var type = EquipTrainModel.GetTrainType(equipPosition.y);
    //     var maxConfig = WashLevelMaxConfig.Get(type, star);
    //     var maxLevel = maxConfig == null ? 1 : maxConfig.levelMax;
    //     var trainLevel = Mathf.Min(maxLevel, trainModel.GetTrainLevel(equipPosition));
    //     trainProperty.level = trainLevel;
    //     var trainConfig = EquipWashConfig.Get(type, trainLevel);
    //     trainProperty.properties = new List<Int2>();
    //     if (trainConfig == null)
    //     {
    //         var trainConfigLevel1 = EquipWashConfig.Get(type, 1);
    //         trainProperty.properties.Add(new Int2(trainConfigLevel1.config.attType1, 0));
    //         trainProperty.properties.Add(new Int2(trainConfigLevel1.config.attType2, 0));
    //         //trainProperty.properties.Add(new Int2(trainConfigLevel1.config.attType3, 0));
    //     }
    //     else
    //     {
    //         var trainedProperties = trainModel.GetTrainedProperties(equipPosition);
    //         trainProperty.properties.Add(new Int2(trainConfig.config.attType1, Mathf.Min(trainedProperties.x, trainConfig.config.attMax1)));
    //         trainProperty.properties.Add(new Int2(trainConfig.config.attType2, Mathf.Min(trainedProperties.y, trainConfig.config.attMax2)));
    //         //trainProperty.properties.Add(new Int2(trainConfig.config.attType3, Mathf.Min(trainedProperties.z, trainConfig.config.attMax3)));
    //     }
    //     return trainProperty;
    // }
    private static SkillInfo GetSkillInfo(int itemId)
    {
        var config = ItemConfig.Get(itemId);
        if (config == null)
        {
            return default(SkillInfo);
        }
        var skillInfo = new SkillInfo();
        skillInfo.skills = new List<int>();
        if (config.AddSkill1 != 0)
        {
            skillInfo.skills.Add(config.AddSkill1);
        }
        if (config.AddSkill2 != 0)
        {
            skillInfo.skills.Add(config.AddSkill2);
        }
        return skillInfo;
    }
    private static SkillInfo GetSkillInfo(int itemId, CustomEquipInfo info)
    {
        var skillInfo = new SkillInfo();
        skillInfo.skills = new List<int>();
        if (!info.equipSkillList.IsNullOrEmpty())
        {
            skillInfo.skills = info.equipSkillList;
        }
        else
        {
            return GetSkillInfo(itemId);
        }
        return skillInfo;
    }
    // private static SkillInfo GetSkillInfo(int itemId, string guid)
    // {
    //     var skillInfo = new SkillInfo();
    //     skillInfo.skills = new List<int>();
    //     var item = packModel.GetItemByGuid(guid);
    //     if (item == null)
    //     {
    //         return GetSkillInfo(itemId);
    //     }
    //     var values = item.GetUseData((int)ItemUseDataKey.equipSkills);
    //     if (!values.IsNullOrEmpty())
    //     {
    //         skillInfo.skills = values;
    //     }
    //     else
    //     {
    //         return GetSkillInfo(itemId);
    //     }
    //     return skillInfo;
    // }
    // private static GetWay GetGetWay(int itemId)
    // {
    //     var config = ItemConfig.Get(itemId);
    //     if (config == null)
    //     {
    //         return default(GetWay);
    //     }
    //     var getWay = new GetWay();
    //     getWay.itemId = itemId;
    //     getWay.ways = new List<int>();
    //     foreach (var way in config.GetWay)
    //     {
    //         var wayConfig = GetItemWaysConfig.Get(way);
    //         if (wayConfig.FuncOpenId == 0 || FuncOpen.Instance.IsFuncOpen(wayConfig.FuncOpenId))
    //         {
    //             int activityType = 0;  // 活动模板 参考OpenServerActivityCenter.ActivityType
    //             if (wayConfig.customize == 2)
    //             {
    //                 activityType = (int)OpenServerActivityCenter.ActivityType.AT_JRZF;
    //             }
    //             else if (wayConfig.customize == 3)
    //             {
    //                 activityType = (int)OpenServerActivityCenter.ActivityType.AT_HFHD;
    //             }
    //             if (wayConfig.ActiveType == -1 || OpenServerActivityCenter.Instance.IsActivityOpen(wayConfig.ActiveType, activityType))
    //             {
    //                 getWay.ways.Add(way);
    //             }
    //         }
    //     }
    //     return getWay;
    // }
    // private static bool IsEquipGemHoleOpen(Int2 equipPosition, int maxStar, int hole)
    // {
    //     GemHoleCondition condition;
    //     if (gemModel.TryGetGemHoleCondition(hole, out condition))
    //     {
    //         var star = starModel.GetStarLevel(equipPosition);
    //         if (Mathf.Min(star, maxStar) < condition.equipStar)
    //         {
    //             return false;
    //         }
    //         var vipLevel = PlayerDatas.Instance.baseData.VIPLv;
    //         if (vipLevel < condition.vipLevel)
    //         {
    //             return false;
    //         }
    //     }
    //     return true;
    // }
    private static TipType GetTipType(int itemId)
    {
@@ -1630,8 +431,6 @@
            case 111:
            case 112:
                return TipType.Equip;
            // case 42:
            //     return TipType.PetMount;
            case 147:
                return TipType.TreasurePavilion;
            case 150:
Main/System/KnapSack/Logic/ItemLogicUtility.cs
@@ -7,260 +7,8 @@
public class ItemLogicUtility : Singleton<ItemLogicUtility>
{
    // private string normalGSFormula;
    // private List<int> equipBaseProperties = new List<int>();
    // Dictionary<int, int> equipSkillScores = new Dictionary<int, int>();
    PackManager packModel { get { return PackManager.Instance; } }
    // BuffModel buffDatas { get { return ModelCenter.Instance.GetModel<BuffModel>(); } }
    // MountModel mountDatas { get { return ModelCenter.Instance.GetModel<MountModel>(); } }
    // PetModel petDatas { get { return ModelCenter.Instance.GetModel<PetModel>(); } }
    // StrengthenModel strengthDatas { get { return ModelCenter.Instance.GetModel<StrengthenModel>(); } }
    // MagicianModel magicianModel { get { return ModelCenter.Instance.GetModel<MagicianModel>(); } }
    // ComposeWinModel composeModel { get { return ModelCenter.Instance.GetModel<ComposeWinModel>(); } }
    // EquipModel equipModel { get { return ModelCenter.Instance.GetModel<EquipModel>(); } }
    // AlchemyModel alchemyModel { get { return ModelCenter.Instance.GetModel<AlchemyModel>(); } }
    public void Init()
    {
        // var GSFormulaConfig = FuncConfigConfig.Get("EquipGSFormula");
        // normalGSFormula = GSFormulaConfig.Numerical1;
        // var equipSkillScoreJson = JsonMapper.ToObject(GSFormulaConfig.Numerical4);
        // foreach (var key in equipSkillScoreJson.Keys)
        // {
        //     var skillId = 0;
        //     int.TryParse(key, out skillId);
        //     if (skillId != 0)
        //     {
        //         equipSkillScores[skillId] = (int)equipSkillScoreJson[key];
        //     }
        // }
        // var baseAttr = JsonMapper.ToObject(GSFormulaConfig.Numerical2);
        // if (baseAttr.IsArray)
        // {
        //     for (int i = 0; i < baseAttr.Count; i++)
        //     {
        //         equipBaseProperties.Add(int.Parse(baseAttr[i].ToString()));
        //     }
        // }
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitialize;
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitialize;
    }
    void OnBeforePlayerDataInitialize()
    {
        isPackResetOk = true;
    }
    #region 计算装备评分
    class EquipSorceProperties
    {
        Dictionary<int, int> properties = new Dictionary<int, int>();
        public int this[int id] { get { return properties[id]; } set { properties[id] = value; } }
        public List<int> Keys { get { return new List<int>(properties.Keys); } }
        void Add(int id, int value)
        {
            if (properties.ContainsKey(id))
            {
                properties[id] += value;
            }
            else
            {
                properties[id] = value;
            }
        }
        public void AddRange(List<int> ids, List<int> values)
        {
            if (ids == null || values == null)
            {
                return;
            }
            var count = Mathf.Min(ids.Count, values.Count);
            for (int i = 0; i < count; i++)
            {
                Add(ids[i], values[i]);
            }
        }
        public void AddRange(int[] ids, int[] values)
        {
            if (ids == null || values == null)
            {
                return;
            }
            var length = Mathf.Min(ids.Length, values.Length);
            for (int i = 0; i < length; i++)
            {
                Add(ids[i], values[i]);
            }
        }
        public void AddRange(Dictionary<int, int> keyValues)
        {
            if (keyValues == null)
            {
                return;
            }
            foreach (var item in keyValues)
            {
                Add(item.Key, item.Value);
            }
        }
        public void AddBaseProperties(int itemId, List<int> reference)
        {
            var config = ItemConfig.Get(itemId);
            if (config == null)
            {
                return;
            }
            if (config.Effect1 != 0 && reference.Contains(config.Effect1))
            {
                properties.Add(config.Effect1, config.EffectValueA1);
            }
            if (config.Effect2 != 0 && reference.Contains(config.Effect2))
            {
                properties.Add(config.Effect2, config.EffectValueA2);
            }
            if (config.Effect3 != 0 && reference.Contains(config.Effect3))
            {
                properties.Add(config.Effect3, config.EffectValueA3);
            }
            if (config.Effect4 != 0 && reference.Contains(config.Effect4))
            {
                properties.Add(config.Effect4, config.EffectValueA4);
            }
            if (config.Effect5 != 0 && reference.Contains(config.Effect5))
            {
                properties.Add(config.Effect5, config.EffectValueA5);
            }
        }
        public void AddCustomProperties(int itemId)
        {
            if (!AppointItemConfig.HasKey(itemId))
            {
                return;
            }
            var config = AppointItemConfig.Get(itemId);
            AddRange(config.LegendAttrID, config.LegendAttrValue);
        }
        public bool ContainsKey(int id)
        {
            return properties.ContainsKey(id);
        }
    }
    // private Dictionary<int, int> GetEquipLegendProperties(int itemId)
    // {
    //     var legendProperties = LegendPropertyUtility.GetLegendProFromEquipShen(itemId);
    //     if (legendProperties == null)
    //         legendProperties = LegendPropertyUtility.GetEquipProperties(itemId);
    //     var properties = new Dictionary<int, int>();
    //     if (legendProperties != null)
    //     {
    //         foreach (var item in legendProperties)
    //         {
    //             properties[item.x] = item.y;
    //         }
    //     }
    //     return properties;
    // }
    // private Dictionary<int, int> GetEquipShenProperties(int itemId)
    // {
    //     var shenProperties = ShenPropertyUtility.GetEquipShenProperties(itemId);
    //     var properties = new Dictionary<int, int>();
    //     if (shenProperties != null)
    //     {
    //         foreach (var item in shenProperties)
    //         {
    //             properties[item.x] = item.y;
    //         }
    //     }
    //     return properties;
    // }
    public bool IsCustomItem(int itemId)
    {
        if (!ItemConfig.HasKey(itemId))
        {
            return false;
        }
        return ItemConfig.Get(itemId).Effect1 == 220;
    }
    /// <summary>
    /// 得到装备的评分
    /// </summary>
    /// <param name="itemId"></param>
    /// <returns></returns>
    private Dictionary<PropertyType, float> curEquipAttrDict = new Dictionary<PropertyType, float>(); //存储当前装备属性对应的数值 key 属性 value 属性值
    private void CalculateEquipAttr(int itemId, EquipSorceProperties properties)
    {
        var config = ItemConfig.Get(itemId);
        var minAttack = properties.ContainsKey((int)PropertyType.MinAtk) ? properties[(int)PropertyType.MinAtk] : 0;
        var maxAttack = properties.ContainsKey((int)PropertyType.MaxAtk) ? properties[(int)PropertyType.MaxAtk] : 0;
        var attack = properties.ContainsKey((int)PropertyType.ATK) ? properties[(int)PropertyType.ATK] : 0;
        properties[(int)PropertyType.MinAtk] = minAttack + attack;
        properties[(int)PropertyType.MaxAtk] = maxAttack + attack;
        curEquipAttrDict.Clear();
        foreach (var key in properties.Keys)
        {
            var attrType = (PropertyType)key;
            switch (attrType)
            {
                case PropertyType.ATKSPEED:
                case PropertyType.OnlyFinalHurt:
                case PropertyType.PVPAtkBackHP:
                case PropertyType.MinAtk:
                case PropertyType.MaxAtk:
                case PropertyType.AddFinalHurt:
                case PropertyType.ReduceFinalHurt:
                    curEquipAttrDict.Add(attrType, properties[key]);
                    break;
                default:
                    curEquipAttrDict.Add(attrType, properties[key]);
                    break;
            }
        }
    }
    #endregion
@@ -298,652 +46,15 @@
    public event Action<string> GetBetterEquipEvent; //得到更好的装备 value 物品的实例ID
    // public void OnGetEquip(ItemModel item)
    // {
    //     if (item == null)
    //     {
    //         return;
    //     }
    //     if (item.packType != PackType.Item)
    //     {
    //         return;
    //     }
    //     if (!IsJobCompatibleItem(item.itemId))
    //     {
    //         return;
    //     }
    //     int equipPlace = item.config.EquipPlace;
    //     if ((RoleEquipType)equipPlace == RoleEquipType.Wing)
    //     {
    //         var wing = packModel.GetItemByIndex(PackType.Equip, SpiritWeaponModel.WING_EQUIPINDEX);
    //         if (wing == null)
    //         {
    //             if (!SpiritWeaponModel.hasAutoEquipWing)
    //             {
    //                 SpiritWeaponModel.hasAutoEquipWing = true;
    //                 ItemOperateUtility.Instance.PutOnItem(item.guid);
    //                 return;
    //             }
    //         }
    //     }
    //     switch ((RoleEquipType)equipPlace)
    //     {
    //         case RoleEquipType.Weapon:
    //         case RoleEquipType.Weapon2:
    //         case RoleEquipType.Hat:
    //         case RoleEquipType.Clothes:
    //         case RoleEquipType.Belt:
    //         case RoleEquipType.Trousers:
    //         case RoleEquipType.Shoes:
    //         case RoleEquipType.Neck:
    //         case RoleEquipType.FairyCan1:
    //         case RoleEquipType.FairyCan2:
    //         case RoleEquipType.Glove:
    //         case RoleEquipType.Jade:
    //         case RoleEquipType.Wing:
    //         case RoleEquipType.Guard:
    //         case RoleEquipType.PeerlessWeapon1:
    //         case RoleEquipType.PeerlessWeapon2:
    //             if (betterEquipExceptDungeonDict.ContainsKey(PlayerDatas.Instance.baseData.MapID))
    //             {
    //                 if (betterEquipExceptDungeonDict[PlayerDatas.Instance.baseData.MapID].Contains(item.itemId))
    //                 {
    //                     return;
    //                 }
    //             }
    //             SetGetBetterEquipEvent(item);
    //             break;
    //     }
    // }
    private void SetGetBetterEquipEvent(ItemModel model)
    {
        // // if (model.isAuction)
        // // {
        // //    return;
        // // }
        // var itemEffectTime = model.GetUseData((int)ItemUseDataKey.createTime);
        // if (!itemEffectTime.IsNullOrEmpty() && itemEffectTime.Count > 0)
        // {
        //     if (itemEffectTime[0] != 0)
        //     {
        //         var cool = KnapsackTimeCDMgr.Instance.GetItemCoolById(model.guid);
        //         double remainTime = 0;
        //         if (cool != null)
        //         {
        //             remainTime = cool.GetRemainTime();
        //         }
        //         if (remainTime >= 0 && remainTime < 120 && model.config.ExpireTime > 0)
        //         {
        //             return;
        //         }
        //     }
        // }
        // if (!equipModel.IsLevelUnLocked(model.config.LV))
        // {
        //     return;
        // }
        // int isFightUp = IsFightUp(model.itemId, model.score);
        // if (isFightUp != 1)
        // {
        //     return;
        // }
        // if (GetBetterEquipEvent != null)
        // {
        //     GetBetterEquipEvent(model.guid);
        // }
    }
    Dictionary<int, ItemModel> RealmBetterDict = new Dictionary<int, ItemModel>();
    // public Dictionary<int, ItemModel> CheckBetterEquipByRealm()
    // {
    //     RealmBetterDict.Clear();
    //     SinglePack singlePack = packModel.GetSinglePack(PackType.Item);
    //     if (singlePack == null) return RealmBetterDict;
    //     int realmLv = PlayerDatas.Instance.baseData.realmLevel;
    //     Dictionary<int, ItemModel> pairs = singlePack.GetAllItems();
    //     foreach (var model in pairs.Values)
    //     {
    //         var equipServerIndex = EquipSet.ClientPlaceToServerPlace(new Int2(model.config.LV, model.config.EquipPlace));
    //         if (model.config.EquipPlace > 0
    //             && model.config.EquipPlace != (int)RoleEquipType.Guard
    //             && model.config.RealmLimit <= realmLv
    //             && !IsOverdue(model.guid)
    //             && IsFightUp(model.itemId, model.score) == 1)
    //         {
    //             if (!RealmBetterDict.ContainsKey(equipServerIndex))
    //             {
    //                 RealmBetterDict.Add(equipServerIndex, model);
    //             }
    //             else
    //             {
    //                 if (model.score > RealmBetterDict[equipServerIndex].score)
    //                 {
    //                     RealmBetterDict[equipServerIndex] = model;
    //                 }
    //             }
    //         }
    //     }
    //     return RealmBetterDict;
    // }
    // List<ItemModel> RealmDruglist = new List<ItemModel>();
    // public List<ItemModel> GetDruglistByRealm()
    // {
    //     RealmDruglist.Clear();
    //     SinglePack singlePack = packModel.GetSinglePack(PackType.Item);
    //     if (singlePack == null) return RealmDruglist;
    //     int realmLv = PlayerDatas.Instance.baseData.realmLevel;
    //     Dictionary<int, ItemModel> pairs = singlePack.GetAllItems();
    //     foreach (var model in pairs.Values)
    //     {
    //         if (packModel.CheckIsDrugById(model.itemId))
    //         {
    //             AttrFruitConfig fruitConfig = AttrFruitConfig.Get(model.itemId);
    //             if (!packModel.IsReachMaxUseDrug(fruitConfig)
    //                 && model.config.RealmLimit <= realmLv)
    //             {
    //                 RealmDruglist.Add(model);
    //             }
    //         }
    //     }
    //     return RealmDruglist;
    // }
    #region 物品处于CD中的逻辑处理
    private List<string> itemEffectTimelist = new List<string>(); //key 物品实例ID
    /// <summary>
    /// 物品使用时间限制
    /// </summary>
    public void SetItemEffectCDTime(string guid, int itemID, int getTime, int serverSurplusTime)
    {
        double time = GetTimeOffest(TimeUtility.GetTime((uint)getTime));
        if (time < 0)
        {
            time = 0;
        }
        ItemConfig itemConfig = ItemConfig.Get(itemID);
        if (time >= itemConfig.ExpireTime)
        {
            KnapsackTimeCDMgr.Instance.UnRegister(guid);
            return;
        }
        double remainTime = (serverSurplusTime > 0 ? serverSurplusTime : itemConfig.ExpireTime) - time;
        KnapsackTimeCDMgr.Instance.Register(guid, itemID, remainTime);
    }
    public double GetTimeOffest(DateTime getTime)
    {
        Debug.Log("现在时间:" + TimeUtility.ServerNow + "获得时间:" + getTime);
        //TimeUtility.SyncServerTime();
        TimeSpan t = TimeUtility.ServerNow - getTime;
        Debug.Log("时间差:" + t.TotalSeconds);
        return t.TotalSeconds;
    }
    #endregion
    #region 设置可以一键出售的物品数据
    private int playerLv;
    private Dictionary<int, List<ItemModel>> _lifePotionDict = new Dictionary<int, List<ItemModel>>(); //key 药水等级
    private List<int> _sellItemScorelist = new List<int>();
    private Dictionary<int, Dictionary<int, List<ItemModel>>> _sameIndexEquipDict = new Dictionary<int, Dictionary<int, List<ItemModel>>>();  //存储相同装备位的装备
                                                                                                                                              // private  _sameEquipScoreDict = new Dictionary<int, List<ItemModel>>(); //存储相同ID中相同装备评分的装备
    private Dictionary<int, ItemModel> _packModelDict;
    private List<ItemModel> _sellItemlist = new List<ItemModel>();
    // public List<ItemModel> GetSellItemList()
    // {
    //     GetOneKeySellModel();
    //     _sellItemlist.Sort(SetSellItemOrder);
    //     return _sellItemlist;
    // }
    // public int SetSellItemOrder(ItemModel startModel, ItemModel endModel)
    // {
    //     bool startIsEquip = IsRealmEquip(startModel.itemId);
    //     bool endIsEquip = IsRealmEquip(endModel.itemId);
    //     if (startIsEquip.CompareTo(endIsEquip) != 0) return -startIsEquip.CompareTo(endIsEquip);
    //     int order1 = startModel.config.Type;
    //     int order2 = endModel.config.Type;
    //     if (order1.CompareTo(order2) != 0) return order1.CompareTo(order2);
    //     int color1 = startModel.config.ItemColor;
    //     int color2 = endModel.config.ItemColor;
    //     if (color1.CompareTo(color2) != 0) return -color1.CompareTo(color2);
    //     int code1 = startModel.itemId;
    //     int code2 = endModel.itemId;
    //     if (code1.CompareTo(code2) != 0) return -code1.CompareTo(code2);
    //     return 0;
    // }
    // public void GetOneKeySellModel()
    // {
    //     SinglePack singlePack = packModel.GetSinglePack(PackType.Item);
    //     if (singlePack == null)
    //         return;
    //     _sellItemlist.Clear();
    //     _lifePotionDict.Clear();
    //     _sameIndexEquipDict.Clear();
    //     _sellItemScorelist.Clear();
    //     playerLv = PlayerDatas.Instance.baseData.LV;
    //     _packModelDict = singlePack.GetAllItems();
    //     foreach (var key in _packModelDict.Keys)
    //     {
    //         GetCanSellEquipList(_packModelDict[key]);
    //         ItemModel itemModel = _packModelDict[key];
    //         if (drugIDs.Contains(itemModel.itemId))
    //         {
    //             if (!_lifePotionDict.ContainsKey(itemModel.config.LV))
    //             {
    //                 List<ItemModel> modellist = new List<ItemModel>();
    //                 modellist.Add(itemModel);
    //                 _lifePotionDict.Add(itemModel.config.LV, modellist);
    //             }
    //             else
    //             {
    //                 _lifePotionDict[itemModel.config.LV].Add(itemModel);
    //             }
    //         }
    //     }
    //     #region 得到可以出售的装备
    //     foreach (var key in _sameIndexEquipDict.Keys)
    //     {
    //         _sellItemScorelist = _sameIndexEquipDict[key].Keys.ToList();
    //         _sellItemScorelist.Sort();
    //         if (_sellItemScorelist.Count > 0)
    //         {
    //             int score = 0;
    //             for (score = _sellItemScorelist.Count - 1; score > -1; score--)
    //             {
    //                 SinglePack equipPack = packModel.GetSinglePack(PackType.Equip);
    //                 ItemModel model = null;
    //                 if (equipPack != null)
    //                 {
    //                     model = equipPack.GetItemByIndex(key);
    //                 }
    //                 var modellist = _sameIndexEquipDict[key][_sellItemScorelist[score]];
    //                 bool remainBetter = true;
    //                 for (var i = 0; i < modellist.Count; i++)
    //                 {
    //                     if (model != null)
    //                     {
    //                         if (remainBetter)
    //                         {
    //                             if (model.score < _sellItemScorelist[score] && IsJobCompatibleItem(model.itemId))
    //                             {
    //                                 _sameIndexEquipDict[key].Remove(_sellItemScorelist[score]);
    //                                 remainBetter = false;
    //                                 break;
    //                             }
    //                         }
    //                     }
    //                     else
    //                     {
    //                         if (IsJobCompatibleItem(model.itemId))
    //                         {
    //                             if (remainBetter)
    //                             {
    //                                 _sameIndexEquipDict[key].Remove(_sellItemScorelist[score]);
    //                                 remainBetter = false;
    //                                 break;
    //                             }
    //                         }
    //                     }
    //                 }
    //                 if (!remainBetter)
    //                 {
    //                     break;
    //                 }
    //             }
    //             for (var j = 0; j < _sellItemScorelist.Count; j++)
    //             {
    //                 if (_sameIndexEquipDict[key].ContainsKey(_sellItemScorelist[j]))
    //                 {
    //                     var sellModlelist = _sameIndexEquipDict[key][_sellItemScorelist[j]];
    //                     for (var k = 0; k < sellModlelist.Count; k++)
    //                     {
    //                         _sellItemlist.Add(sellModlelist[k]);
    //                     }
    //                 }
    //             }
    //         }
    //     }
    //     #endregion
    //     List<int> drugLvlist = new List<int>();
    //     drugLvlist.AddRange(_lifePotionDict.Keys.ToList());
    //     drugLvlist.Sort();
    //     for (int i = drugLvlist.Count - 1; i > -1; i--)
    //     {
    //         if (drugLvlist[i] > playerLv)
    //         {
    //             _lifePotionDict.Remove(drugLvlist[i]);
    //         }
    //         else
    //         {
    //             _lifePotionDict.Remove(drugLvlist[i]);
    //             break;
    //         }
    //     }
    //     foreach (var list in _lifePotionDict.Values)
    //     {
    //         for (int i = 0; i < list.Count; i++)
    //         {
    //             _sellItemlist.Add(list[i]);
    //         }
    //     }
    // }
    //得到满足出售条件的装备列表
    // public void GetCanSellEquipList(ItemModel model)
    // {
    //     if (model.config.EquipPlace == 0 || !onekeySellTypes.Contains(model.config.Type))
    //         return;
    //     Dictionary<int, List<ItemModel>> sameScoreDict;
    //     List<ItemModel> sameScorelist;
    //     if (model.config.ItemColor < 3)
    //     {
    //         if (!_sameIndexEquipDict.ContainsKey(model.config.EquipPlace))
    //         {
    //             sameScoreDict = new Dictionary<int, List<ItemModel>>();
    //             sameScorelist = new List<ItemModel>();
    //             sameScorelist.Add(model);
    //             sameScoreDict.Add(model.score, sameScorelist);
    //             _sameIndexEquipDict.Add(model.config.EquipPlace, sameScoreDict);
    //         }
    //         else
    //         {
    //             if (_sameIndexEquipDict[model.config.EquipPlace].ContainsKey(model.score))
    //             {
    //                 _sameIndexEquipDict[model.config.EquipPlace][model.score].Add(model);
    //             }
    //             else
    //             {
    //                 sameScorelist = new List<ItemModel>();
    //                 sameScorelist.Add(model);
    //                 _sameIndexEquipDict[model.config.EquipPlace].Add(model.score, sameScorelist);
    //             }
    //         }
    //     }
    // }
    #endregion
    #region 发送请求
    /// <summary>
    /// 一键出售物品的请求
    /// </summary>
    /// <param name="_oneKeySelllist"></param>
    // public void OneKeySell(List<ItemModel> _oneKeySelllist)
    // {
    //     if (!isPackResetOk || SettingEffectMgr.Instance.isStartOneKeySell) return;
    //     SettingEffectMgr.Instance.isStartOneKeySell = true;
    //     byte[] itemIndexs = new byte[_oneKeySelllist.Count];
    //     int i = 0;
    //     for (i = 0; i < _oneKeySelllist.Count; i++)
    //     {
    //         itemIndexs[i] = (byte)_oneKeySelllist[i].gridIndex;
    //     }
    //     CA311_tagCMSellItem sellItem = new CA311_tagCMSellItem();
    //     sellItem.PackType = (int)PackType.Item;
    //     sellItem.Count = (byte)_oneKeySelllist.Count;
    //     sellItem.ItemIndex = itemIndexs;
    //     GameNetSystem.Instance.SendInfo(sellItem);
    // }
    /// <summary>
    /// 整理包裹物品
    /// </summary>
    /// <param name="type"></param>
    public bool isPackResetOk { get; set; }
    public void ResetPack(PackType type)
    {
        if (lookLineIndex > -1)
        {
            SetLookIndex(null);
        }
        SinglePack singlePack = packModel.GetSinglePack(type);
        if (singlePack != null)
        {
            var packReset = new C070F_tagCItemPackReset();
            packReset.Type = (byte)type;
            packReset.ItemBeginIndex = 0;
            packReset.ItemEndIndex = (ushort)(singlePack.unlockedGridCount - 1);
            GameNetSystem.Instance.SendInfo(packReset); //整理物品
            if (type == PackType.Item)
            {
                isPackResetOk = false;
            }
        }
    }
    #endregion
    #region 查看某个位置的物品
    public event Action lookEquipEvent;
    private int _lookLineIndex = -1;
    public int lookLineIndex { get { return _lookLineIndex; } private set { _lookLineIndex = value; } }
    public string lookItemGUID { get; private set; }
    public void SetLookIndex(string guid, int singleRowCount = 5)
    {
        if (string.IsNullOrEmpty(guid) || guid == "")
        {
            lookLineIndex = -1;
        }
        else
        {
            int index = packModel.GetItemByGuid(guid).gridIndex;
            lookLineIndex = index / singleRowCount;
            lookItemGUID = guid;
        }
        if (lookEquipEvent != null)
        {
            lookEquipEvent();
        }
    }
    #endregion
    #region 判断是否有更好的装备替换
    /// <summary>
    /// 获取装备评分最高可提升战力的装备
    /// </summary>
    /// <param name="_places"></param>
    /// <returns></returns>
    // public string GetHighestScoreEquipByPlace(int equipPlace)
    // {
    //     var itemPackage = packModel.GetSinglePack(PackType.Item);
    //     var allItems = itemPackage.GetAllItems();
    //     var putModel = packModel.GetItemByIndex(PackType.Equip, equipPlace);
    //     var guid = string.Empty;
    //     var score = putModel == null ? 0 : putModel.score;
    //     foreach (var item in allItems.Values)
    //     {
    //         if (item.config.EquipPlace == equipPlace)
    //         {
    //             if (!IsOverdue(item.guid)
    //                && (IsJobCompatibleItem(item.itemId)) && item.score > score)
    //             {
    //                 guid = item.guid;
    //                 score = item.score;
    //             }
    //         }
    //     }
    //     return guid;
    // }
    #endregion
    bool IsCanPutOn(ItemModel item)
    {
        if (IsJobCompatibleItem(item.itemId))
        {
            return false;
        }
        int equipPlace = item.config.EquipPlace;
        if (equipPlace == 0 || equipPlace > 17)
        {
            return false;
        }
        var putOnlimitList = item.GetUseData((int)ItemUseDataKey.cancelUseLimit);
        if (!putOnlimitList.IsNullOrEmpty())
        {
            if (putOnlimitList[0] == 1)
            {
                return true;
            }
        }
        return true;
    }
    #region 得到物品的品质颜色
    private Dictionary<int, int> wingRefineQualityDict;
    private int[] wingsQualitys;
    private int[] wingsRefineExps;
    public int GetItemQuality(int itemId, Dictionary<int, List<int>> useDataDic = null)
    {
        wingsQualitys = null;
        wingsRefineExps = null;
        ItemConfig itemConfig = ItemConfig.Get(itemId);
        // wingRefineQualityDict = WingRefineAttrConfig.GetWingsQualityModel(itemConfig.LV);
        // if (useDataDic != null)
        // {
        //     if (useDataDic.ContainsKey(42) && wingRefineQualityDict != null)
        //     {
        //         wingsQualitys = wingRefineQualityDict.Keys.ToArray();
        //         wingsRefineExps = wingRefineQualityDict.Values.ToArray();
        //         int i = 0;
        //         for (i = wingsRefineExps.Length - 1; i > -1; i--)
        //         {
        //             if (useDataDic[42][0] >= wingsRefineExps[i])
        //             {
        //                 return wingsQualitys[i];
        //             }
        //         }
        //     }
        // }
        return itemConfig.ItemColor;
    }
    #endregion
    //设置玩家货币显示
    public string OnChangeCoinsUnit(long value)
    {
        return UIHelper.ReplaceLargeNum(value);
    }
    /// <summary>
    /// 装备是否可以提升战力
    /// </summary>
    /// <param name="_itemID"></param>
    /// <param name="_score"></param>
    /// <returns></returns>
    public int IsFightUp(int _itemID, int _score)//-1低级,0不是本职业,1更好
    {
        var config = ItemConfig.Get(_itemID);
        if (config != null)
        {
            // var index = EquipModel.GetItemServerEquipPlace(_itemID);
            // if (index == -1)
            // {
            //     return 0;
            // }
            // var item = packModel.GetItemByIndex(PackType.Equip, index);
            // var equipScore = item != null ? item.score : 0;
            // if (IsJobCompatibleItem(_itemID))
            // {
            //     return _score.CompareTo(equipScore);
            // }
            // else
            // {
            //     return 0;
            // }
        }
        return 0;
    }
    // 不包含未开放装备的比较 属于-1
    public int IsFightUpEx(int _itemID, int _score, int _realm)//-1低级,0不是本职业,1更好
    {
        var config = ItemConfig.Get(_itemID);
        if (config != null)
        {
            // var index = EquipModel.GetItemServerEquipPlace(_itemID);
            // if (index == -1)
            // {
            //     return 0;
            // }
            // var item = packModel.GetItemByIndex(PackType.Equip, index);
            // var equipScore = item != null ? item.score : 0;
            // if (IsJobCompatibleItem(_itemID))
            // {
            //     if (_realm > PlayerDatas.Instance.baseData.realmLevel)
            //         return -1;
            //     return _score.CompareTo(equipScore);
            // }
            // else
            // {
            //     return 0;
            // }
        }
        return 0;
    }
    #region 物品是否过期
@@ -979,170 +90,6 @@
    #endregion
    public bool IsJobCompatibleItem(int itemId)
    {
        var config = ItemConfig.Get(itemId);
        return config != null && (config.JobLimit == 0 || config.JobLimit == PlayerDatas.Instance.baseData.Job);
    }
    public bool IsRealmEquip(int itemId)
    {
        if (!ItemConfig.HasKey(itemId))
        {
            return false;
        }
        var config = ItemConfig.Get(itemId);
        return config.Type >= 101 && config.Type <= 112;
    }
    public bool IsWing(int itemId)
    {
        if (!ItemConfig.HasKey(itemId))
        {
            return false;
        }
        var config = ItemConfig.Get(itemId);
        return config.Type == 113 || config.Type == 39 || config.Type == 52;
    }
    public bool IsDogzEquip(int itemId)
    {
        if (!ItemConfig.HasKey(itemId))
        {
            return false;
        }
        var config = ItemConfig.Get(itemId);
        return config.Type >= 119 && config.Type <= 123;
    }
    public bool IsSpiritWeapon(int itemId)
    {
        if (!ItemConfig.HasKey(itemId))
        {
            return false;
        }
        var config = ItemConfig.Get(itemId);
        return config.Type >= 113 && config.Type <= 117;
    }
    public bool IsSuitEquip(int itemId)
    {
        if (!ItemConfig.HasKey(itemId))
        {
            return false;
        }
        var config = ItemConfig.Get(itemId);
        return config.SuiteiD > 0 && config.Type >= 101 && config.Type <= 112;
    }
    // public bool IsThanksItem(int itemID)
    // {
    //     if (AssistThanksGiftConfig.Get(itemID) == null)
    //     {
    //         return false;
    //     }
    //     return true;
    // }
    // public int GetSpecialSpiritPropertyValue(int itemId)
    // {
    //     var config = SpiritWeaponConfig.Get(itemId);
    //     if (config == null)
    //     {
    //         return 0;
    //     }
    //     var propertyId = 0;
    //     var propertyValue = 0;
    //     for (var i = 0; i < config.AttrIDList.Length; i++)
    //     {
    //         var id = config.AttrIDList[i];
    //         if (id == 79 || id == 80)
    //         {
    //             propertyId = id;
    //             propertyValue = config.AttrValueList[i];
    //             break;
    //         }
    //     }
    //     if (propertyId == 0)
    //     {
    //         return 0;
    //     }
    //     Equation.Instance.Clear();
    //     Equation.Instance.AddKeyValue("maxOOPValue", propertyValue);
    //     var maxLevel = 100;
    //     if (specialSpiritPropertyMaxLevels.ContainsKey(config.Level))
    //     {
    //         maxLevel = specialSpiritPropertyMaxLevels[config.Level];
    //     }
    //     Equation.Instance.AddKeyValue("lv", Mathf.Min(maxLevel, PlayerDatas.Instance.baseData.LV));
    //     return Equation.Instance.Eval<int>(specialSpiritPropertyFormula[propertyId]);
    // }
    // public int GetSpecialSpiritPropertyMaxLevel(int itemId)
    // {
    //     var config = SpiritWeaponConfig.Get(itemId);
    //     if (config == null)
    //     {
    //         return 0;
    //     }
    //     var maxLevel = 0;
    //     if (specialSpiritPropertyMaxLevels.ContainsKey(config.Level))
    //     {
    //         maxLevel = specialSpiritPropertyMaxLevels[config.Level];
    //     }
    //     return maxLevel;
    // }
    //装备对比,用于非实际装备简单比较 是否需要此装备
    // public bool IsSatisfyEquipBetterEquip(int itemID)
    // {
    //     if (!IsRealmEquip(itemID))
    //     {
    //         return false;
    //     }
    //     var itemConfig = ItemConfig.Get(itemID);
    //     if (itemConfig.JobLimit != 0 && itemConfig.JobLimit != PlayerDatas.Instance.baseData.Job)
    //     {
    //         return false;
    //     }
    //     var equipSet = equipModel.GetEquipSet(itemConfig.LV);
    //     if (!equipSet.IsSlotUnLocked(itemConfig.EquipPlace))
    //     {
    //         return false;
    //     }
    //     var equipGuid = equipModel.GetEquip(new Int2(itemConfig.LV, itemConfig.EquipPlace));
    //     if (string.IsNullOrEmpty(equipGuid))
    //     {
    //         return true;
    //     }
    //     var itemModel = packModel.GetItemByGuid(equipGuid);
    //     if (itemModel == null)
    //     {
    //         return true;
    //     }
    //     if (itemConfig.ItemColor > itemModel.config.ItemColor)
    //     {
    //         return true;
    //     }
    //     return itemModel.config.SuiteiD == 0 && itemConfig.SuiteiD != 0;
    // }
    #region 获得英雄物品展示立绘
    public List<int> poplhHeroIdList = new List<int>();
@@ -1175,10 +122,6 @@
    #endregion
    public Action OnGetItem;    //CommonGetItemWin界面关闭时触发
    public string getItemInfo { get; private set; }  //通用显示获得的界面信息
    public string getItemBtnText { get; private set; }  //通用显示获得的界面按钮文字 默认确定
    public int closeSeconds { get; private set; } // 关闭倒计时时间 如果传0代表手动关闭
    public bool isNameShow { get; private set; } // 是否展示物品名字
    // 如果同时有多种奖励封包,同一个事件归集,不同事件直接顶掉显示最新
@@ -1240,51 +183,7 @@
        ShowHeroLHWin(items);//有传奇以上英雄显示立绘
    }
    //可以指定打开的窗口
    // public void ShowGetItemEx<T>(List<Item> items, string info = "", int seconds = 3, string btnName = "", Action func = null, bool isNameShow = true, string eventName = "default") where T : UIBase
    // {
    //     if (getItemEventName != eventName)
    //     {
    //         if (UIManager.Instance.IsOpenedInList<T>())
    //         {
    //             //----------------------记得改立即关闭
    //             UIManager.Instance.CloseWindow<T>();
    //         }
    //         totalShowItems.Clear();
    //         getItemEventName = eventName;
    //     }
    //     //相同ID 合并数量显示
    //     for (int i = 0; i < items.Count; i++)
    //     {
    //         var id = items[i].id;
    //         if (totalShowItems.ContainsKey(id))
    //         {
    //             totalShowItems[id] = new Item(id, items[i].countEx + totalShowItems[id].countEx, items[i].useType, items[i].quality);
    //         }
    //         else
    //         {
    //             totalShowItems.Add(id, items[i]);
    //         }
    //     }
    //     getItemInfo = info;
    //     OnGetItem = func;
    //     if (btnName == "")
    //         btnName = Language.Get("PopConfirmWin_OK");
    //     getItemBtnText = btnName;
    //     closeSeconds = seconds;
    //     this.isNameShow = isNameShow;
    //     OnGetItemShowEvent?.Invoke();
    //     if (!UIManager.Instance.IsOpenedInList<T>())
    //     {
    //         UIManager.Instance.OpenWindow<T>();
    //     }
    //     ShowHeroLHWin(items);//有传奇以上英雄显示立绘
    // }
    public void ClearGetItem()
    {
        //不清理物品,下次收到数据会自动清理,只改事件方便打开界面测试
@@ -1367,25 +266,6 @@
            return false;
        }
        //var usedCountTotal = packModel.GetItemTotalUsedTimes(item.itemId);
        // var fruitConfig = AttrFruitConfig.Get(item.itemId);
        // if (fruitConfig != null)
        // {
        //     var limitTimes = 0;
        //     if (fruitConfig.FuncID == 2)
        //     {
        //         limitTimes = alchemyModel.GetAlchemyDrugUseLimit(item.itemId);
        //     }
        //     else
        //     {
        //         limitTimes = fruitConfig.basicUseLimit;
        //     }
        //     if (usedCountTotal >= limitTimes || useCnt > limitTimes)
        //     {
        //         error = 1;
        //         return false;
        //     }
        // }
        error = 0;
        return true;
@@ -1406,4 +286,25 @@
        GameNetSystem.Instance.SendInfo(useItem); //使用物品
    }
    /// <summary>
    /// 打开批量使用物品界面
    /// </summary>
    /// <param name="itemID">要使用的物品</param>
    /// <param name="showTipEvent">参数为要使用的物品数量,返回值为文本</param>
    public void ShowItemBatchUseWin(int itemID, Func<long, string> showTipEvent)
    {
        if (UIManager.Instance.IsOpened<ItemBatchUseWin>())
        {
            UIManager.Instance.CloseWindow<ItemBatchUseWin>();
        }
        if (!CheckItemCount(PackType.Item, itemID, 1, 2))
        {
            return;
        }
        ItemBatchUseWin.itemID = itemID;
        ItemBatchUseWin.ShowTextEvent = showTipEvent;
        UIManager.Instance.OpenWindow<ItemBatchUseWin>();
    }
}
Main/System/KnapSack/PackManager.cs
@@ -387,7 +387,6 @@
    public void PackResetOk(H0316_tagPackResetOK packreset)
    {
        ItemLogicUtility.Instance.isPackResetOk = true;
    }
    public void UseItemSuccess(H0706_tagUseItemSuccess success)
Main/System/Message/RichTableEvent.cs
@@ -58,14 +58,7 @@
                                        if (cfg != null)
                                        {
                                            var _itemColor = cfg.ItemColor;
                                            if (ItemLogicUtility.Instance.IsWing(id))//翅膀
                                            {
                                                Dictionary<int, List<int>> userdata = null;
                                                if (TryGetUserData(_dict, out userdata))
                                                {
                                                    _itemColor = ItemLogicUtility.Instance.GetItemQuality(cfg.ID, userdata);
                                                }
                                            }
                                            var itemName = cfg.ItemName;
                                            if (_dict.ContainsKey("chatsend"))
                                            {
@@ -469,18 +462,5 @@
        return UIHelper.AppendColor(_itemColor, info, colorType == 1);
    }
    static bool TryGetUserData(Dictionary<string, string> href, out Dictionary<int, List<int>> userdata)
    {
        userdata = null;
        if (href.ContainsKey("itemplus"))
        {
            var itemplus = LitJson.JsonMapper.ToObject<ItemTipUtility.CustomItemPlus>(href["itemplus"]);
            userdata = ConfigParse.Analysis(itemplus.UserData);
        }
        else if (href.ContainsKey("userdata"))
        {
            userdata = ConfigParse.Analysis(href["userdata"]);
        }
        return false;
    }
}