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; } public int score { get; private set; } public Dictionary> 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 GetUseData(int key) { List list = null; if (useDataDict != null) { useDataDict.TryGetValue(key, out list); } return 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; } }