少年修仙传客户端代码仓库
client_linchunjie
2018-08-23 522ca3468a56c88cb15eaa428eb7499d3dba386f
System/OpenServerActivity/OnlineRewardsModel.cs
@@ -1,372 +1,372 @@
//--------------------------------------------------------
//    [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 = ConfigManager.Instance.GetTemplate<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 = ConfigManager.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());
                        }
                    }
                }
            }
        }
    }
}
//--------------------------------------------------------
//    [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());
                        }
                    }
                }
            }
        }
    }
}