| using System;  | 
| using System.Collections.Generic;  | 
| using UnityEngine;  | 
|   | 
|   | 
| public class ItemModel  | 
| {  | 
|     public readonly PackType packType;  | 
|   | 
|     public ItemConfig config { get; private set; }  | 
|     public ItemInfo itemInfo { get; private set; }  | 
|     private int score;  | 
|     public Dictionary<int, List<int>> useDataDict { get; private set; }  | 
|   | 
|     public string guid { get { return itemInfo == null ? string.Empty : itemInfo.guid; } }  | 
|     public int itemId { get { return itemInfo == null ? 0 : itemInfo.itemId; } }  | 
|     public int count { get { return itemInfo == null ? 0 : itemInfo.count; } }  | 
|     public int gridIndex { get { return itemInfo == null ? 0 : itemInfo.index; } }  | 
|     public bool isAuction { get { return itemInfo == null ? false : itemInfo.isAuction == 1; } }  | 
|     public int preItemCount { get; private set; }  | 
|   | 
|     public int auctionSurplusTime {  | 
|   | 
|         get {  | 
|             var createTime = GetUseDataFirstValue(50);  | 
|             if (createTime > 0)  | 
|             {  | 
|                 var overdueTime = TimeUtility.GetTime((uint)createTime) + new TimeSpan(GeneralDefine.acutionItemHour * TimeSpan.TicksPerHour);  | 
|                 return (int)(overdueTime).Subtract(TimeUtility.ServerNow).TotalSeconds;  | 
|             }  | 
|             else  | 
|             {  | 
|                 return 0;  | 
|             }  | 
|         }  | 
|     }  | 
|   | 
|     public int overdueSurplusTime {  | 
|         get {  | 
|             var surplusTime = 0;  | 
|             if (config.ExpireTime > 0)  | 
|             {  | 
|                 var createTime = GetUseDataFirstValue((int)ItemUseDataKey.createTime);  | 
|                 if (createTime > 0)  | 
|                 {  | 
|                     var seconds = GetUseDataFirstValue(48);  | 
|                     var overdueTime = DateTime.Now;  | 
|                     if (seconds != 0)  | 
|                     {  | 
|                         overdueTime = TimeUtility.GetTime((uint)createTime).AddSeconds(seconds);  | 
|                     }  | 
|                     else  | 
|                     {  | 
|                         overdueTime = TimeUtility.GetTime((uint)createTime).AddSeconds(config.ExpireTime);  | 
|                     }  | 
|   | 
|                     surplusTime = (int)(overdueTime).Subtract(TimeUtility.ServerNow).TotalSeconds;  | 
|                 }  | 
|             }  | 
|   | 
|             return surplusTime;  | 
|         }  | 
|     }  | 
|   | 
|     public ItemModel(PackType type, ItemInfo info)  | 
|     {  | 
|         packType = type;  | 
|         SetItemInfo(info);  | 
|     }  | 
|   | 
|     public void SetItemInfo(ItemInfo info)  | 
|     {  | 
|         if (itemInfo != null)  | 
|         {  | 
|             preItemCount = itemInfo.count;  | 
|         }  | 
|   | 
|         itemInfo = info;  | 
|         config = ItemConfig.Get(info.itemId);  | 
|         if (config == null)  | 
|         {  | 
|             Debug.LogErrorFormat("ItemConfig.Get({0}) is null", info.itemId);  | 
|             return;  | 
|         }  | 
|         useDataDict = ConfigParse.Analysis(info.userData);  | 
|   | 
|         var customCount = GetUseDataFirstValue((int)ItemUseDataKey.itemCount);  | 
|         if (customCount > 0)  | 
|         {  | 
|             itemInfo.count = customCount;  | 
|         }  | 
|   | 
|         if (config.ExpireTime > 0)  | 
|         {  | 
|             var createTime = GetUseDataFirstValue((int)ItemUseDataKey.createTime);  | 
|             if (createTime > 0)  | 
|             {  | 
|                 var serverSurplusTime = GetUseDataFirstValue(48);  | 
|                 //ItemLogicUtility.Instance.SetItemEffectCDTime(info.guid, info.itemId, createTime, serverSurplusTime);  | 
|             }  | 
|         }  | 
|   | 
|         this.score = info.gearScore;//ItemLogicUtility.Instance.GetEquipScore(itemId, useDataDict);  | 
|     }  | 
|   | 
|     public void RefreshCount(int count)  | 
|     {  | 
|         if (itemInfo != null)  | 
|         {  | 
|             preItemCount = itemInfo.count;  | 
|         }  | 
|   | 
|         itemInfo.count = count;  | 
|     }  | 
|   | 
|     public List<int> GetUseData(int key)  | 
|     {  | 
|         List<int> list = null;  | 
|         if (useDataDict != null)  | 
|         {  | 
|             useDataDict.TryGetValue(key, out list);  | 
|         }  | 
|   | 
|         return list == null ? new List<int>() : list;  | 
|     }  | 
|   | 
|     public int GetUseDataFirstValue(int key)  | 
|     {  | 
|         if (useDataDict != null && useDataDict.ContainsKey(key) && useDataDict[key].Count > 0)  | 
|         {  | 
|             return useDataDict[key][0];  | 
|         }  | 
|   | 
|         return 0;  | 
|     }  | 
|   | 
| }  | 
|   | 
| public class ItemInfo  | 
| {  | 
|     public int index; //位置索引  | 
|   | 
|     public int itemId;  | 
|   | 
|     public int count; //物品数量  | 
|   | 
|     public int isAuction;//是否拍品  | 
|   | 
|     public int remainHour;  //剩余时间(小时)  | 
|   | 
|     public string userData;//size = UserDataLen  | 
|   | 
|     public string guid; //物品的实例ID  | 
|     public int gearScore; //评分  | 
|     public bool isLock; //是否锁定  | 
|   | 
|     public ItemInfo()  | 
|     {  | 
|   | 
|     }  | 
|   | 
|     public ItemInfo(H0725_tagRolePackRefreshEx.tagRoleItemRefresh serverItem)  | 
|     {  | 
|         itemId = (int)serverItem.ItemID;  | 
|         index = serverItem.ItemPlace;  | 
|         count = (int)serverItem.ItemCount;  | 
|         remainHour = (int)serverItem.RemainHour;  | 
|         userData = serverItem.UserData.Trim().Replace("\0", "");  | 
|         guid =  serverItem.ItemGUID.Trim().Replace("\0", "");  | 
|         isAuction = serverItem.IsBind;  | 
|         gearScore = (int)serverItem.GearScore;  | 
|         isLock = serverItem.IsLocked > 0;  | 
|     }  | 
|   | 
|     public ItemInfo(H0704_tagRolePackRefresh serverItem)  | 
|     {  | 
|         itemId = (int)serverItem.ItemID;  | 
|         index = serverItem.ItemPlace;  | 
|         count = (int)serverItem.ItemCount;  | 
|         remainHour = (int)serverItem.RemainHour;  | 
|         //字符串后面有空字符问题,经常会导致不可预料的bug  | 
|         userData = serverItem.UserData.Trim().Replace("\0", "");  | 
|         guid = serverItem.ItemGUID.Trim().Replace("\0", "");  | 
|         isAuction = serverItem.IsBind;  | 
|         gearScore = (int)serverItem.GearScore;  | 
|         isLock = serverItem.IsLocked > 0;  | 
|     }  | 
|   | 
| }  | 
|   | 
|   |