//--------------------------------------------------------
|
// [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<int, OnlineRewardsClass> OnlineRewards = new Dictionary<int, OnlineRewardsClass>();//在线累计奖励信息
|
public Dictionary<int, Dictionary<int, int>> AcceptDrizeAllDic = new Dictionary<int, Dictionary<int, int>>();//领奖记录
|
|
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<int> OnlineRewardsTimeList = new List<int>();//每天奖励情况
|
private bool IsRedPointBool = false;
|
public int onlineRewardsCloseDay { get; private set; }
|
public bool IsOk = false;
|
public override void Init()
|
{
|
return;//-------------------
|
var _cfg = Config.Instance.Get<FuncConfigConfig>("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<OnlineRewardsWin>() && OnlineRewardsUpdate != null)
|
{
|
OnlineRewardsUpdate();
|
}
|
}
|
|
|
private void IsOkAward()
|
{
|
if (AcceptDrizeAllDic.Count != 0)
|
{
|
foreach (var key in AcceptDrizeAllDic.Keys)
|
{
|
Dictionary<int, int> 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<int, int> dic = AcceptDrizeAllDic[TimeUtility.CreateDays];
|
var keys = new List<int>(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<int, int> 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<OnlineAwardConfig>();
|
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<int, int> _Dic = new Dictionary<int, int>();
|
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<int[][]>(_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<int, int> _Dic = new Dictionary<int, int>();
|
for (int i = 0; i < value.TimeMinute.Length; i++)
|
{
|
_Dic.Add(value.TimeMinute[i], -1);
|
|
}
|
AcceptDrizeAllDic.Add(value.RewardID, _Dic);
|
}
|
else
|
{
|
Dictionary<int, int> _Dic = new Dictionary<int, int>();
|
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());
|
}
|
}
|
}
|
}
|
}
|
}
|
}
|
|
|
|
|