using vnxbqy.UI; using System; using System.Collections.Generic; using UnityEngine.UI; using System.Linq; using LitJson; //极品白拿 public class NeedForWhiteClass { public int ID;//ID public int NeedMoney;//需要仙玉 public int BuyState; // 购买状态 0-未购买 1-已领返还 其他数值-time值购买时间 public string Name;//礼包名 public int Day;//返还天数 public float AddPower;//提升的战力 public NeedForWhiteModel.NeedForWhiteItem AwardItem;//奖励信息 } public class NeedForWhiteModel : ILModel { public Dictionary NeedForWhiteDic = new Dictionary(); public int FreeGoodsOpenTimeS = 0;//总时间 public int OpenTimeS = 0;//活动开始的时间 public event Action UpdateNeedForWhiteEvent; Redpoint redpoint = new Redpoint(MainRedPoint.jpbnRedPoint); protected override void Init() { var FreeGoodsOpenTime = FuncConfigConfig.Get("FreeGoodsOpenTime"); FreeGoodsOpenTimeS = int.Parse(FreeGoodsOpenTime.Numerical1); GameEvent.OnDayEvent += DayEvent; GameEvent.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitialize; ParseConfig(); } protected override void UnInit() { GameEvent.OnDayEvent -= DayEvent; GameEvent.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitialize; } public void OnBeforePlayerDataInitialize() { OpenTimeS = 0; var keyList = NeedForWhiteDic.Keys.ToList(); for (int i = 0; i < keyList.Count; i++) { NeedForWhiteDic[keyList[i]].BuyState = 0; } } public void OnPlayerLoginOk() { } public void ParseConfig() { var FreeGood = ILFreeGoodsConfig.GetKeys(); NeedForWhiteDic.Clear(); for (int i = 0; i < FreeGood.Count; i++) { var Value = ILFreeGoodsConfig.Get(FreeGood[i]); var NeedForWhite = new NeedForWhiteClass(); NeedForWhite.ID = Value.ID; NeedForWhite.NeedMoney = Value.NeedMoney; NeedForWhite.BuyState = 0; NeedForWhite.Name = Value.Name; NeedForWhite.Day = Value.Day; NeedForWhite.AddPower = Value.AddPower; var awardItem = new NeedForWhiteItem(); var _jsonData = JsonMapper.ToObject(Value.AwardItem); var keyList = _jsonData.Keys.ToList(); for (int k = 0; k < keyList.Count; k++) { var key = keyList[k]; var _job = int.Parse(key); var _itemArray = JsonMapper.ToObject(_jsonData[key].ToJson()); for (int j = 0; j < _itemArray.Length; j++) { awardItem.Add(_job, new ItemEx(_itemArray[j][0], _itemArray[j][1], _itemArray[j][2])); } } NeedForWhite.AwardItem = awardItem; NeedForWhiteDic.Add(Value.ID, NeedForWhite); } } public class NeedForWhiteItem { private Dictionary> m_AwardDict = new Dictionary>(); public List GetAwardItem(int _job) { List _items = null; m_AwardDict.TryGetValue(_job, out _items); return _items; } public void Add(int _job, ItemEx _item) { List _list = null; if (!m_AwardDict.TryGetValue(_job, out _list)) { _list = new List(); m_AwardDict.Add(_job, _list); } _list.Add(_item); } } public void FreeGoodsInfo(IL_HA318_tagMCFreeGoodsInfo Info) { OpenTimeS = (int)Info.OpenTime; for (int i = 0; i < Info.Count; i++) { var Id = Info.FreeGoodsList[i].ID; if (NeedForWhiteDic.ContainsKey(Id)) { NeedForWhiteDic[Id].BuyState = (int)Info.FreeGoodsList[i].BuyState; } } if (UpdateNeedForWhiteEvent != null) { UpdateNeedForWhiteEvent(); } UpdateRedpoint(); } public void BuyReceive(int ID) { var SendInfo = new CA504_tagCMPlayerGetReward(); SendInfo.RewardType = 10; SendInfo.DataEx = (uint)ID; GameNetSystem.Instance.SendInfo(SendInfo); } public int GetCloseSeconds() { var overTime = TimeUtility.GetTime((uint)(OpenTimeS + FreeGoodsOpenTimeS)); if (TimeUtility.ServerNow > overTime) { return 0; } return (int)(overTime - TimeUtility.ServerNow).TotalSeconds; } //开启时间+持续时间 所有礼包buystate>1 即有未返还 public bool IsOpen() { if (!FuncOpen.Instance.IsFuncOpen(130)) { return false; } if (TimeUtility.ServerNow <= TimeUtility.GetTime((uint)(OpenTimeS + FreeGoodsOpenTimeS))) { return true; } var keyList = NeedForWhiteDic.Keys.ToList(); for (int i = 0; i < keyList.Count; i++) { if (NeedForWhiteDic[keyList[i]].BuyState > 1) { //未返还 return true; } } return false; } //-1 未购买 -2已领取 -3可领取 -4过期 其他数值为倒计时时间秒 public int GetState(int id) { if (NeedForWhiteDic.ContainsKey(id)) { var state = NeedForWhiteDic[id].BuyState; if (state > 1) { DateTime serverDay = new DateTime(TimeUtility.Year, TimeUtility.Month, TimeUtility.Day, 0, 0, 0); DateTime buyTime = TimeUtility.GetTime((uint)state); DateTime buyDay = new DateTime(buyTime.Year, buyTime.Month, buyTime.Day, 0, 0, 0); DateTime getDay = buyDay.AddDays(NeedForWhiteDic[id].Day); if ((serverDay - buyDay).Days >= NeedForWhiteDic[id].Day) { //可领取 return -3; } //倒计时 return Math.Max((int)(getDay - TimeUtility.ServerNow).TotalSeconds, 0); } else if (state == 0) { if (TimeUtility.ServerNow > TimeUtility.GetTime((uint)(OpenTimeS + FreeGoodsOpenTimeS))) { //过期 return -4; } //未购买 return -1; } else { //已领取 return -2; } } //未购买 return -1; } public void UpdateRedpoint() { redpoint.state = RedPointState.None; var keyList = NeedForWhiteDic.Keys.ToList(); for (int i = 0; i < keyList.Count; i++) { if (NeedForWhiteDic[keyList[i]].BuyState > 1) { if (GetState(keyList[i]) == -3) { redpoint.state = RedPointState.Simple; return; } } } } void DayEvent() { UpdateRedpoint(); } }