using vnxbqy.UI; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; //仙匣秘境-翻牌 public class OperationXianXiaMJLottery : OperationBase { public int moneyType = 0; public int costMoneyValue = 0; public int layerNum = 0; public int superItemCanChooseCount = 1; public int lotteryScore; //当前抽奖积分 public int useItemID; //消耗物品ID,默认1个;消耗物品或货币二选一即可,或都配则先消耗道具,不足则消耗货币 //翻牌:位置-物品信息 0代表选中的大奖 public Dictionary awardItems = new Dictionary(); //大奖库:物品ID-物品信息 public Dictionary selectItems = new Dictionary(); public List selectItemIDSort = new List(); //排序用 //选中的大奖 public XianXiaMJAwardItem selectBigAward = null; public const int bigAwardType = 9; public int cardShowCount; //盘面牌总数量 public Dictionary rankInfo = new Dictionary(); //根据排名显示奖励 从1开始 本服个人榜 public int maxRank; //根据奖励显示最大排名 public override bool SatisfyOpenCondition() { return PlayerDatas.Instance.baseData.LV >= limitLv; } public override string ToDisplayTime() { var textBuilder = OperationTimeHepler.textBuilder; textBuilder.Length = 0; textBuilder.Append(startDate.ToDisplay()); if (startDate != endDate) { textBuilder.Append("—"); textBuilder.Append(endDate.ToDisplay()); } return textBuilder.ToString(); } public override void Reset() { base.Reset(); moneyType = 0; costMoneyValue = 0; layerNum = 0; superItemCanChooseCount = 1; selectBigAward = null; awardItems.Clear(); selectItems.Clear(); selectItemIDSort.Clear(); cardShowCount = 0; rankInfo.Clear(); } public void UpdateActXianXiaMJInfo(HAA58_tagMCActXianXiaMJInfo netPack) { moneyType = netPack.MoneyType; costMoneyValue = netPack.MoneyValue; useItemID = (int)netPack.UseItemID; rankInfo.Clear(); maxRank = 0; for (int i = 0; i < netPack.PersonalBillboardInfoList.Length; i++) { List items = new List(); for (int j = 0; j < netPack.PersonalBillboardInfoList[i].AwardItemList.Length; j++) { items.Add(new Item((int)netPack.PersonalBillboardInfoList[i].AwardItemList[j].ItemID, netPack.PersonalBillboardInfoList[i].AwardItemList[j].ItemCount, netPack.PersonalBillboardInfoList[i].AwardItemList[j].IsBind)); } //仅处理一档额外奖励 List itemsEx = new List(); var awardsEx = netPack.PersonalBillboardInfoList[i].AwardItemExList; int needScoreEx = 0; if (awardsEx.Length != 0) { for (int j = 0; j < awardsEx[0].AwardItemList.Length; j++) { itemsEx.Add(new Item((int)awardsEx[0].AwardItemList[j].ItemID, awardsEx[0].AwardItemList[j].ItemCount, awardsEx[0].AwardItemList[j].IsBind)); } needScoreEx = (int)awardsEx[0].NeedScore; } rankInfo[(int)netPack.PersonalBillboardInfoList[i].Rank] = new ActBillboardAwards() { needScore = (int)netPack.PersonalBillboardInfoList[i].NeedScore, awardItemList = items, awardItemListEx = itemsEx, needScoreEx = needScoreEx, }; maxRank = Math.Max(maxRank, (int)netPack.PersonalBillboardInfoList[i].Rank); } } public void UpdateActXianXiaMJLayerInfo(HAA79_tagMCActXianXiaMJLayerInfo netPack) { layerNum = netPack.LayerNum; superItemCanChooseCount = netPack.SuperItemCanChooseCount; lotteryScore = (int)netPack.LotteryScore; awardItems.Clear(); selectItems.Clear(); selectItemIDSort.Clear(); selectBigAward = null; cardShowCount = 0; for (int i = 0; i < netPack.AwardItemList.Length; i++) { var item = netPack.AwardItemList[i]; if (item.ItemLibType == bigAwardType) { //选中的大奖 selectBigAward = new XianXiaMJAwardItem() { ItemLibType = item.ItemLibType, ItemID = item.ItemID, ItemCount = item.ItemCount, }; } if (item.PosNum != 0) { //非0为翻牌 awardItems[item.PosNum] = new XianXiaMJAwardItem() { ItemLibType = item.ItemLibType, ItemID = item.ItemID, ItemCount = item.ItemCount, }; } } cardShowCount = selectBigAward == null ? netPack.AwardItemList.Length + 1 : netPack.AwardItemList.Length; //大奖库 for (int i = 0; i < netPack.SuperItemList.Length; i++) { var item = netPack.SuperItemList[i]; selectItems[(int)item.ItemID] = new XianXiaMJSelectAward() { ItemCount = item.ItemCount, TotalTimesNow = item.TotalTimesNow, TotalTimesMax = item.TotalTimesMax, LayerLimit = item.LayerLimit, }; selectItemIDSort.Add((int)item.ItemID); //加入顺序 } selectItemIDSort.Sort(CmpLevel); } int CmpLevel(int a, int b) { if (selectItems[a].LayerLimit != selectItems[b].LayerLimit) return selectItems[a].LayerLimit.CompareTo(selectItems[b].LayerLimit); return a.CompareTo(b); } public class XianXiaMJAwardItem { public byte ItemLibType; //物品库类型;9-固定为大奖库,非9-策划自定义库 public uint ItemID; public uint ItemCount; } public class XianXiaMJSelectAward { public uint ItemCount; public byte TotalTimesNow; //当前已产出次数,不限制次数时不记录,即同样为0 public byte TotalTimesMax; //最大可产出次数,0不限 public byte LayerLimit; //大于等于X层后可产出,0不限 } public void UpdateXianXiaMJAwardItemResult(HAA59_tagMCActXianXiaMJAwardItemResult package) { awardItems[package.PosNum] = new XianXiaMJAwardItem() { ItemLibType = package.ItemLibType, ItemID = package.ItemID, ItemCount = package.ItemCount, }; if (selectItems.ContainsKey((int)package.ItemID)) { selectItems[(int)package.ItemID].TotalTimesNow = package.TotalTimesNow; } } //结果展示时间 转为倒计时,以跨服时间为准 public string ShowResultTime() { var endDataTime = TimeUtility.GetDayStartTime(ILTimeUtility.ServerCrossNow.Year, ILTimeUtility.ServerCrossNow.Month, ILTimeUtility.ServerCrossNow.Day).AddDays(1); return TimeUtility.SecondsToHMS((int)(endDataTime - ILTimeUtility.ServerCrossNow).TotalSeconds); } //是否展示结果时间, 以跨服时间为准(前提为以判断是活动中) public bool IsShowResultTime() { var endJoinDateTime = new DateTime(endDate.year, endDate.month, endDate.day, joinEndHour, joinEndMinute, 0); return ILTimeUtility.ServerCrossNow >= endJoinDateTime; } //显示参与时间 public string ToDisplayJoinTime() { var textBuilder = OperationTimeHepler.textBuilder; textBuilder.Length = 0; textBuilder.Append(startDate.ToDisplay(false)); textBuilder.Append(string.Format(" {0}:{1}", joinStartHour.ToString("D2"), joinStartMinute.ToString("D2"))); if (startDate != endDate) { textBuilder.Append(" - "); textBuilder.Append(endDate.ToDisplay(false)); textBuilder.Append(string.Format(" {0}:{1}", joinEndHour.ToString("D2"), joinEndMinute.ToString("D2"))); } return textBuilder.ToString(); } }