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;  
 | 
    }  
 | 
  
 | 
}  
 | 
  
 | 
  
 |