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<int, XianXiaMJAwardItem> awardItems = new Dictionary<int, XianXiaMJAwardItem>();
|
//大奖库:物品ID-物品信息
|
public Dictionary<int, XianXiaMJSelectAward> selectItems = new Dictionary<int, XianXiaMJSelectAward>();
|
public List<int> selectItemIDSort = new List<int>(); //排序用
|
//选中的大奖
|
public XianXiaMJAwardItem selectBigAward = null;
|
public const int bigAwardType = 9;
|
|
public int cardShowCount; //盘面牌总数量
|
|
public Dictionary<int, ActBillboardAwards> rankInfo = new Dictionary<int, ActBillboardAwards>(); //根据排名显示奖励 从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<Item> items = new List<Item>();
|
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<Item> itemsEx = new List<Item>();
|
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();
|
}
|
}
|