//获得一个某等级的下个物品 private DBExchangeOne GetNextItem(int level, int stopLevel, int stopIndex, ref bool isEnd) { if (ExchangeManager.MaxLenth == 0) { return(null); } var beginlevel = ExchangeManager.FindLevel[level]; var beginIndex = ExchangeManager.FindIndex[level]; var nowLookLevel = beginlevel; var nowLookIndex = beginIndex; DBExchangeOne result = null; while (true) { var list = ExchangeManager.ItemList[nowLookLevel]; if (nowLookIndex < list.Count) { result = list[nowLookIndex]; } if (nowLookLevel >= level) { nowLookLevel = 0; nowLookIndex = nowLookIndex + 1; if (nowLookIndex >= ExchangeManager.MaxLenth) { nowLookIndex = 0; } //else if (nowLookIndex == beginIndex && nowLookLevel == beginlevel) //{//如果饶了一圈,则返回空 // return null; //} } else { nowLookLevel++; } if (result != null) { break; } if (nowLookIndex == stopIndex && nowLookLevel == stopLevel) { //如果饶了一圈,则返回空 isEnd = true; return(null); } } ExchangeManager.FindLevel[level] = nowLookLevel; ExchangeManager.FindIndex[level] = nowLookIndex; if (nowLookIndex == stopIndex && nowLookLevel == stopLevel) { //如果饶了一圈,则返回空 isEnd = true; } return(result); }
//移除一个道具 private void RemoveItem(DBExchangeOne item) { var tbItem = Table.GetItemBase(item.ItemData.ItemId); ExchangeManager.ItemList[tbItem.LevelLimit - 1].Remove(item); //等级物品 的快速查询中移除 ExchangeManager.mDbData.StoreItems.Remove(item.Id); //数据库引用移除 ExchangeManager.mTriggers.Remove(item.Id); //该物品定时器移除 if (tbItem.LevelLimit == ExchangeManager.MaxLenIndex) { ResetMaxLen(); //重新计算最大长度 } }
public static StoreBroadcastOne GetConverNetData(this DBExchangeOne dbExchangeOne) { var temp = new StoreBroadcastOne { Id = dbExchangeOne.Id, StartTime = dbExchangeOne.OverTime, ItemData = dbExchangeOne.ItemData, NeedCount = dbExchangeOne.NeedCount, SellCharacterId = dbExchangeOne.SellCharacterId, SellCharacterName = dbExchangeOne.SellCharacterName }; return(temp); }
//添加一个道具 private void AddItem(DBExchangeOne item) { var tbItem = Table.GetItemBase(item.ItemData.ItemId); var tempList = ExchangeManager.ItemList[tbItem.LevelLimit - 1]; tempList.Add(item); var trigger = TeamServerControl.tm.CreateTrigger(DateTime.FromBinary(item.OverTime), () => { RemoveItem(item); }); ExchangeManager.mTriggers.Add(item.Id, trigger); if (tempList.Count >= ExchangeManager.MaxLenth) { ExchangeManager.MaxLenth = tempList.Count; ExchangeManager.MaxLenIndex = tbItem.LevelLimit - 1; } }
//添加广播道具 public long PushItem(ulong characterId, string characterName, ItemBaseData itemBaseData, int needCount, int ContinueMinutes) { var temp = new DBExchangeOne(); temp.Id = GetNextId(); temp.SellCharacterName = characterName; temp.SellCharacterId = characterId; temp.NeedCount = needCount; temp.ItemData = itemBaseData; temp.OverTime = DateTime.Now.AddMinutes(ContinueMinutes).ToBinary(); ExchangeManager.mDbData.StoreItems.Add(temp.Id, temp); AddItem(temp); //tbItem. return(temp.Id); }