/// <summary> /// 生成一条箱子里面的物品 /// </summary> /// <param name="DateId">传入箱子物品</param> /// <returns></returns> public static bool CreateItemBox(int DateId, List <ItemInfo> itemInfos, ref int gold, ref int point, ref int giftToken, ref int medal) { #region 生成物品 List <ItemBoxInfo> FiltInfos = new List <ItemBoxInfo>(); List <ItemBoxInfo> unFiltInfos = FindItemBox(DateId); if (unFiltInfos == null) { return(false); } FiltInfos = unFiltInfos.Where(s => s.IsSelect == true).ToList(); int dropItemCount = 1;//设置掉落数量 int maxRound = Bussiness.ThreadSafeRandom.NextStatic(unFiltInfos.Where(s => s.IsSelect == false).Select(s => s.Random).Max()); List <ItemBoxInfo> RoundInfos = unFiltInfos.Where(s => s.IsSelect == false && s.Random >= maxRound).ToList(); int maxItems = RoundInfos.Count(); if (maxItems > 0) { dropItemCount = dropItemCount > maxItems ? maxItems : dropItemCount; int[] randomArray = GetRandomUnrepeatArray(0, maxItems - 1, dropItemCount); foreach (int i in randomArray) { ItemBoxInfo item = RoundInfos[i]; if (FiltInfos == null) { FiltInfos = new List <ItemBoxInfo>(); } FiltInfos.Add(item); } } #endregion #region 输出物品 foreach (ItemBoxInfo info in FiltInfos) { if (info == null) { return(false); } switch (info.TemplateId) { case -100: gold += info.ItemCount; break; case -200: point += info.ItemCount; break; case -300: giftToken += info.ItemCount; break; case 11408: medal += info.ItemCount; break; default: ItemTemplateInfo temp = Bussiness.Managers.ItemMgr.FindItemTemplate(info.TemplateId); ItemInfo item = ItemInfo.CreateFromTemplate(temp, info.ItemCount, 101); if (item == null) { continue; } item.IsBinds = info.IsBind; item.ValidDate = info.ItemValid; item.StrengthenLevel = info.StrengthenLevel; item.AttackCompose = info.AttackCompose; item.DefendCompose = info.DefendCompose; item.AgilityCompose = info.AgilityCompose; item.LuckCompose = info.LuckCompose; if (itemInfos == null) { itemInfos = new List <ItemInfo>(); } itemInfos.Add(item); break; } } return(true); #endregion }
public static bool CreateItemBox(int DateId, List <ItemInfo> itemInfos, ref int gold, ref int point, ref int giftToken, ref int gp) { List <ItemBoxInfo> FiltInfos = new List <ItemBoxInfo>(); List <ItemBoxInfo> unFiltInfos = ItemBoxMgr.FindItemBox(DateId); bool result; if (unFiltInfos == null) { result = false; } else { FiltInfos = ( from s in unFiltInfos where s.IsSelect select s).ToList <ItemBoxInfo>(); int dropItemCount = 1; int maxRound = 0; foreach (ItemBoxInfo boxInfo in unFiltInfos) { if (!boxInfo.IsSelect && maxRound < boxInfo.Random) { maxRound = boxInfo.Random; } } maxRound = ItemBoxMgr.random.Next(maxRound); List <ItemBoxInfo> RoundInfos = ( from s in unFiltInfos where !s.IsSelect && s.Random >= maxRound select s).ToList <ItemBoxInfo>(); int maxItems = RoundInfos.Count <ItemBoxInfo>(); if (maxItems > 0) { dropItemCount = ((dropItemCount > maxItems) ? maxItems : dropItemCount); int[] randomArray = ItemBoxMgr.GetRandomUnrepeatArray(0, maxItems - 1, dropItemCount); int[] array = randomArray; for (int j = 0; j < array.Length; j++) { int i = array[j]; ItemBoxInfo item = RoundInfos[i]; if (FiltInfos == null) { FiltInfos = new List <ItemBoxInfo>(); } FiltInfos.Add(item); } } foreach (ItemBoxInfo info in FiltInfos) { if (info == null) { result = false; return(result); } int templateId = info.TemplateId; if (templateId <= -200) { if (templateId == -300) { giftToken += info.ItemCount; continue; } if (templateId == -200) { point += info.ItemCount; continue; } } else { if (templateId == -100) { gold += info.ItemCount; continue; } if (templateId == 11107) { gp += info.ItemCount; continue; } } ItemTemplateInfo temp = ItemMgr.FindItemTemplate(info.TemplateId); ItemInfo item2 = ItemInfo.CreateFromTemplate(temp, info.ItemCount, 101); if (item2 != null) { item2.IsBinds = info.IsBind; item2.ValidDate = info.ItemValid; item2.StrengthenLevel = info.StrengthenLevel; item2.AttackCompose = info.AttackCompose; item2.DefendCompose = info.DefendCompose; item2.AgilityCompose = info.AgilityCompose; item2.LuckCompose = info.LuckCompose; item2.IsTips = info.IsTips; item2.IsLogs = info.IsLogs; if (itemInfos == null) { itemInfos = new List <ItemInfo>(); } itemInfos.Add(item2); } } result = true; } return(result); }