//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Tuesday, March 06, 2018 //-------------------------------------------------------- //七天在线奖励 using System; using System.Collections.Generic; using TableConfig; using Snxxz.UI; using System.Linq; public class OnlineRewardsModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk { public class OnlineRewardsClass { public int RewardID; public int[] TimeMinute; public ImpactRankModel.RankAwardItem RankAwardItem;//阶段奖励数据 } public Dictionary OnlineRewards = new Dictionary();//在线累计奖励信息 public Dictionary> AcceptDrizeAllDic = new Dictionary>();//领奖记录 public uint CumulativeTime;//获取累计登入时间 public DateTime DateTime;//获取时间 public int GetMaximumDuration;//获取最长领取时间 public static event Action OnlineRewardsUpdate; private const int Redpoint_key1 = 20901;//七天累计登录红点 private Redpoint redPointStre1 = new Redpoint(209, Redpoint_key1); public Redpoint onlineRedpoint { get { return redPointStre1; } } private List OnlineRewardsTimeList = new List();//每天奖励情况 private bool IsRedPointBool = false; public int onlineRewardsCloseDay { get; private set; } public bool IsOk = false; public override void Init() { return;//------------------- var _cfg = Config.Instance.Get("SevenOnlineReaward"); onlineRewardsCloseDay = int.Parse(_cfg.Numerical1); GetMaximumDuration = int.Parse(_cfg.Numerical1); } public void OnBeforePlayerDataInitialize() { return;//------------------- IsOk = false; CumulativeTime = 0; //AcceptDrizeAllDic.Clear(); } public void OnPlayerLoginOk() { return;//------------------- TimeUtility.OnServerOpenDayRefresh -= OnStepServerDay; FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent; GlobalTimeEvent.Instance.secondEvent -= secondEvent; TimeUtility.OnServerOpenDayRefresh += OnStepServerDay; FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent; GlobalTimeEvent.Instance.secondEvent += secondEvent; IsOk = true; //OnlineRewards.Clear(); //AcceptDrizeAllDic.Clear(); DateTime = DateTime.Now; IsOkAward(); DataReading(); for (int i = 0; i < OnlineRewardsTimeList.Count; i++) { ISAwardInfo(CumulativeTime, OnlineRewardsTimeList[i], i + 1); } IsRedPointBool = true; OnlineRewardsPoint(); if (WindowCenter.Instance.CheckOpen() && OnlineRewardsUpdate != null) { OnlineRewardsUpdate(); } } private void IsOkAward() { if (AcceptDrizeAllDic.Count != 0) { foreach (var key in AcceptDrizeAllDic.Keys) { Dictionary dic = AcceptDrizeAllDic[key]; foreach (var key1 in dic.Keys) { dic[key1] = -1; } AcceptDrizeAllDic[key] = dic; } } } private void secondEvent() { TimeSpan date = DateTime.Now - DateTime; date = date.Add(new TimeSpan(TimeSpan.TicksPerMillisecond * CumulativeTime)); if (TimeUtility.CreateDays <= onlineRewardsCloseDay && date.TotalHours < GetMaximumDuration) { if (!AcceptDrizeAllDic.ContainsKey(TimeUtility.CreateDays)) { return; } Dictionary dic = AcceptDrizeAllDic[TimeUtility.CreateDays]; var keys = new List(dic.Keys); foreach (var key in keys) { if (dic.Count != 0) { if (date.TotalMinutes >= key && dic[key] == -1) { AcceptDrizeAllDic[TimeUtility.CreateDays][key] = 0; OnlineRewardsPoint(); if (OnlineRewardsUpdate != null) { OnlineRewardsUpdate(); } } } } } } public override void UnInit() { IsRedPointBool = false; } private void OnFuncStateChangeEvent(int obj) { if (obj == 125) { OnlineRewardsPoint(); } } private void OnlineRewardsEvent() { OnlineRewardsPoint(); } private void OnlineRewardsPoint()//七天累计登录红点 { return;//------------------- if (!IsOk) { return; } redPointStre1.state = RedPointState.None; if (!FuncOpen.Instance.IsFuncOpen(125)) { return; } bool Bool = false; if (AcceptDrizeAllDic.Count == 0 || TimeUtility.CreateDays >= onlineRewardsCloseDay || TimeUtility.CreateDays <= 0) { return; } Dictionary Dic = AcceptDrizeAllDic[TimeUtility.CreateDays]; foreach (var key in Dic.Keys) { if (Dic[key] == 0) { Bool = true; } } if (Bool) { redPointStre1.state = RedPointState.Simple; } } private void OnStepServerDay() { if (TimeUtility.CreateDays <= onlineRewardsCloseDay) { DateTime = DateTime.Now; } for (int i = 0; i < OnlineRewardsTimeList.Count; i++) { ISAwardInfo(CumulativeTime, OnlineRewardsTimeList[i], i + 1); } IsRedPointBool = true; OnlineRewardsPoint(); } private void DataReading() { if (OnlineRewards.Count != 0) { return; } var OnlineRewardConfig = Config.Instance.GetAllValues(); foreach (var value in OnlineRewardConfig) { if (!OnlineRewards.ContainsKey(value.RewardID)) { OnlineRewardsClass onlineRewardsClass = new OnlineRewardsClass(); onlineRewardsClass.RewardID = value.RewardID; onlineRewardsClass.TimeMinute = value.Time; if (!AcceptDrizeAllDic.ContainsKey(value.RewardID)) { Dictionary _Dic = new Dictionary(); for (int i = 0; i < value.Time.Length; i++) { _Dic.Add(value.Time[i], -1); } AcceptDrizeAllDic.Add(value.RewardID, _Dic); } ImpactRankModel.RankAwardItem _award = new ImpactRankModel.RankAwardItem(); var _jsonData = LitJson.JsonMapper.ToObject(value.Reward); foreach (string key in _jsonData.Keys) { var time = int.Parse(key); var _itemArray = LitJson.JsonMapper.ToObject(_jsonData[key].ToJson()); for (int j = 0; j < _itemArray.Length; j++) { _award.Add(time, new AwardItem() { item = new Item(_itemArray[j][0], _itemArray[j][1]), isBind = 1, }); } } onlineRewardsClass.RankAwardItem = _award; OnlineRewards.Add(value.RewardID, onlineRewardsClass); } } } public void SendReceiveAward(int Index)//发送领取奖励 { CA506_tagCMGetOnlinePrize CA506 = new CA506_tagCMGetOnlinePrize(); CA506.Index = (byte)Index; GameNetSystem.Instance.SendInfo(CA506); } public void GetMCOnlinePrize(uint onlineTime, uint[] prizeInfo)//获取在想奖励 { return;//------------------- CumulativeTime = onlineTime; DateTime = DateTime.Now; OnlineRewardsTimeList.Clear(); for (int i = 0; i < prizeInfo.Length; i++) { OnlineRewardsTimeList.Add((int)prizeInfo[i]); } if (onlineTime <= 0) { ISOpenDayCler(); } if (IsRedPointBool) { for (int i = 0; i < OnlineRewardsTimeList.Count; i++) { ISAwardInfo(CumulativeTime, OnlineRewardsTimeList[i], i + 1); } OnlineRewardsPoint(); } if (OnlineRewardsUpdate != null && IsOk) { OnlineRewardsUpdate(); } } private void ISOpenDayCler() { foreach (var value in OnlineRewards.Values) { if (!AcceptDrizeAllDic.ContainsKey(value.RewardID)) { Dictionary _Dic = new Dictionary(); for (int i = 0; i < value.TimeMinute.Length; i++) { _Dic.Add(value.TimeMinute[i], -1); } AcceptDrizeAllDic.Add(value.RewardID, _Dic); } else { Dictionary _Dic = new Dictionary(); for (int i = 0; i < value.TimeMinute.Length; i++) { _Dic.Add(value.TimeMinute[i], -1); } AcceptDrizeAllDic[value.RewardID] = _Dic; } } } private void ISAwardInfo(uint onlineTime, int awardInfo, int Day) { TimeSpan date = new TimeSpan(TimeSpan.TicksPerMillisecond * onlineTime); int type = int.Parse(System.Convert.ToString(awardInfo, 2)); string typeStr = string.Empty; if (type == 0) { typeStr = "0"; } else { while (type != 0) { typeStr += type % 10; type = type / 10; } } if (!AcceptDrizeAllDic.ContainsKey(Day)) { return; } if (TimeUtility.CreateDays <= onlineRewardsCloseDay && Day <= TimeUtility.CreateDays) { var keysList = AcceptDrizeAllDic[Day].Keys.ToList(); int NeedTimeMinute = keysList[keysList.Count - 1]; if (date.TotalMinutes >= NeedTimeMinute) { int Typei = -1; var keys = AcceptDrizeAllDic[Day].Keys.ToList(); for (int i = 0; i < keys.Count; i++) { Typei += 1; if (Typei < typeStr.Length) { AcceptDrizeAllDic[Day][(keys[i])] = int.Parse(typeStr[Typei].ToString()); } else { AcceptDrizeAllDic[Day][(keys[i])] = 0; } } } else { if (int.Parse(typeStr) != 0) { int Typei = -1; var keys = AcceptDrizeAllDic[Day].Keys.ToList(); for (int i = 0; i < keys.Count; i++) { Typei += 1; if (Typei < typeStr.Length) { AcceptDrizeAllDic[Day][(keys[i])] = int.Parse(typeStr[Typei].ToString()); } } } } } } }