少年修仙传客户端代码仓库
client_Zxw
2018-08-25 c52f85c2a3a10af822e58fa69f54d45556ff4bc5
单号[2924]  投资红点逻辑优化
2个文件已修改
201 ■■■■ 已修改文件
System/Vip/FairyJadeInvestmentModel.cs 47 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Vip/VipInvest/VipInvestModel.cs 154 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Vip/FairyJadeInvestmentModel.cs
@@ -34,8 +34,6 @@
    private int DisplayLevel = 0;//显示等级
    private int DisplayDays = 0;//显示天数
                                //----
    private bool IsOneRedPoint = true;
    public override void Init()
    {
        var InvestRedPoint = Config.Instance.Get<FuncConfigConfig>("InvestRedPoint");
@@ -70,14 +68,7 @@
        IsOk = true;
        InvestmentAmount();
        InvestmentRedPoint();
        if (TimeUtility.CreateDays <= DisplayDays && redPointStre1.state == RedPointState.None)
        {
            IsRedpoint = true;
            if (PlayerDatas.Instance.baseData.LV >= DisplayLevel)
            {
                RedPointSate();
            }
        }
        IsShowRedPointSimple();
        PlayerDatas.Instance.PlayerDataRefreshInfoEvent -= Updatefighting;
        PlayerDatas.Instance.PlayerDataRefreshInfoEvent += Updatefighting;
        FairyJadeInvestmentWin.FairyJadeInvestmentRedPointEvent -= FairyJadeInvestmentRedPoint;
@@ -97,13 +88,7 @@
        }
        if (_tCDBPlayerRefresh == PlayerDataRefresh.LV)
        {
            if (TimeUtility.CreateDays <= DisplayDays && redPointStre1.state == RedPointState.None && PlayerDatas.Instance.baseData.LV >= DisplayLevel)
            {
                if (IsRedpoint)
                {
                    RedPointSate();
                }
            }
            IsShowRedPointSimple();
        }
    }
@@ -283,17 +268,35 @@
        }
        if (IsRedpoint)
        {
            if (IsOneRedPoint)
            {
                redPointStre1.state = RedPointState.Simple;
                IsOneRedPoint = false;
            }
            redPointStre1.state = RedPointState.Simple;
        }
        else
        {
            InvestmentRedPoint();
        }
    }
    private void IsShowRedPointSimple()
    {
        int GetDayOfYear = DateTime.Now.DayOfYear;
        string strKey = "IsOpenFiaryJadeRedPoint" + PlayerDatas.Instance.baseData.LV;
        int day = LocalSave.GetInt(strKey);
        if (day != GetDayOfYear)
        {
            if (TimeUtility.CreateDays <= DisplayDays && redPointStre1.state == RedPointState.None
                && PlayerDatas.Instance.baseData.LV >= DisplayLevel)
            {
                LocalSave.SetInt(strKey, GetDayOfYear);
                IsRedpoint = true;
                RedPointSate();
            }
        }
    }
}
System/Vip/VipInvest/VipInvestModel.cs
@@ -5,21 +5,20 @@
namespace Snxxz.UI
{
    public class VipInvestModel : Model,IBeforePlayerDataInitialize, IPlayerLoginOk
    public class VipInvestModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk
    {
        private Dictionary<string, Dictionary<string, List<InvestReward>>> vipInvestDict = new Dictionary<string, Dictionary<string, List<InvestReward>>>();
        private Dictionary<int, List<InvestConfig>> investCycleDict = new Dictionary<int, List<InvestConfig>>(); //每周期数据
        private Dictionary<string, int[]> vipInvestLvlimitDict = new Dictionary<string, int[]>();
        private Dictionary<int, int[]> investGoldDict = new Dictionary<int, int[]>();
        private Dictionary<int, int> investMaxDayDict = new Dictionary<int, int>();
        public int NeedVipLv { get; private set;}
        public int NeedVipLv { get; private set; }
        private bool IsOkBool = false;
        public bool IsRedpoint = false;
        private int DisplayLevel = 0;//显示等级
        private int DisplayDays = 0;//显示天数
        //----
        private bool IsOneRedPoint = true;
        public override void Init()
        {
            vipInvestDict.Clear();
@@ -33,13 +32,13 @@
            FuncConfigConfig vipInvestLv = Config.Instance.Get<FuncConfigConfig>("VIPInvest");
            NeedVipLv = int.Parse(vipInvestLv.Numerical2);
            JsonData vipInvestData = JsonMapper.ToObject(vipInvestLv.Numerical1);
            foreach(var index in vipInvestData.Keys)
            foreach (var index in vipInvestData.Keys)
            {
                if (vipInvestData[index].IsArray)
                {
                    int[] lvs = new int[vipInvestData[index].Count];
                    vipInvestLvlimitDict.Add(index,lvs);
                    for(int i = 0; i < vipInvestData[index].Count;i++)
                    vipInvestLvlimitDict.Add(index, lvs);
                    for (int i = 0; i < vipInvestData[index].Count; i++)
                    {
                        lvs[i] = int.Parse(vipInvestData[index][i].ToString());
                    }
@@ -47,12 +46,12 @@
            }
            FuncConfigConfig InvestGold = Config.Instance.Get<FuncConfigConfig>("InvestCost");
            JsonData goldData = JsonMapper.ToObject(InvestGold.Numerical1);
            foreach(var type in goldData.Keys)
            foreach (var type in goldData.Keys)
            {
                if (goldData[type].IsArray)
                {
                    int[] golds = new int[goldData[type].Count];
                    investGoldDict.Add(int.Parse(type),golds);
                    investGoldDict.Add(int.Parse(type), golds);
                    for (int i = 0; i < goldData[type].Count; i++)
                    {
                        golds[i] = int.Parse(goldData[type][i].ToString());
@@ -67,7 +66,7 @@
            }
            List<InvestConfig> investlist = Config.Instance.GetAllValues<InvestConfig>();
            if(investlist != null)
            if (investlist != null)
            {
                for (int i = 0; i < investlist.Count; i++)
                {
@@ -75,7 +74,7 @@
                }
            }
        }
        public void OnBeforePlayerDataInitialize()
        {
            IsRedpoint = false;
@@ -90,27 +89,14 @@
            VipInvestWin.VipInvestRedPointEvent += VipInvestRedPointEvent;
            PlayerDatas.Instance.PlayerDataRefreshInfoEvent -= Updatefighting;
            PlayerDatas.Instance.PlayerDataRefreshInfoEvent += Updatefighting;
            if (TimeUtility.CreateDays <= DisplayDays && redPointStre1.state==RedPointState.None)
            {
                IsRedpoint = true;
                if (PlayerDatas.Instance.baseData.LV >= DisplayLevel)
                {
                    RedPointSate();
                }
            }
            IsShowRedPointSimple();
        }
        private void Updatefighting(PlayerDataRefresh _tCDBPlayerRefresh)
        {
            if (_tCDBPlayerRefresh == PlayerDataRefresh.LV)
            {
                if (TimeUtility.CreateDays <= DisplayDays && redPointStre1.state == RedPointState.None && PlayerDatas.Instance.baseData.LV >= DisplayLevel)
                {
                    if (IsRedpoint)
                    {
                        RedPointSate();
                    }
                }
                IsShowRedPointSimple();
            }
        }
@@ -124,37 +110,37 @@
            InvestType type = (InvestType)config.type;
            if (type != InvestType.Vip) return;
            string key = StringUtility.Contact(config.id,config.type,config.needDay);
            string key = StringUtility.Contact(config.id, config.type, config.needDay);
            int cycle = GetInvestCycle(config.needDay);
            if(!investCycleDict.ContainsKey(cycle))
            if (!investCycleDict.ContainsKey(cycle))
            {
                List<InvestConfig> list = new List<InvestConfig>();
                list.Add(config);
                investCycleDict.Add(cycle,list);
                investCycleDict.Add(cycle, list);
            }
            else
            {
                investCycleDict[cycle].Add(config);
            }
            if(!vipInvestDict.ContainsKey(key))
            if (!vipInvestDict.ContainsKey(key))
            {
                Dictionary<string, List<InvestReward>> rewardDict = new Dictionary<string, List<InvestReward>>();
                vipInvestDict.Add(key,rewardDict);
                vipInvestDict.Add(key, rewardDict);
                JsonData jsonData = JsonMapper.ToObject(config.award);
                foreach(var index in jsonData.Keys)
                foreach (var index in jsonData.Keys)
                {
                    List<InvestReward> rewardlist = new List<InvestReward>();
                    rewardDict.Add(index,rewardlist);
                    rewardDict.Add(index, rewardlist);
                    if (jsonData[index].IsArray)
                    {
                        for(int i= 0; i < jsonData[index].Count; i++)
                        for (int i = 0; i < jsonData[index].Count; i++)
                        {
                            JsonData itemData = jsonData[index][i];
                            if(itemData.IsArray)
                            if (itemData.IsArray)
                            {
                                InvestReward reward = new InvestReward(int.Parse(itemData[0].ToString()),ulong.Parse(itemData[1].ToString())
                                InvestReward reward = new InvestReward(int.Parse(itemData[0].ToString()), ulong.Parse(itemData[1].ToString())
                                    , int.Parse(itemData[2].ToString()));
                                rewardlist.Add(reward);
                            }
@@ -168,13 +154,13 @@
            }
        }
        public List<InvestReward> GetInvestRewardlistByID(int id,int type,int day,string index)
        public List<InvestReward> GetInvestRewardlistByID(int id, int type, int day, string index)
        {
            List<InvestReward> rewardlist = null;
            string key = StringUtility.Contact(id,type,day);
            if(vipInvestDict.ContainsKey(key))
            string key = StringUtility.Contact(id, type, day);
            if (vipInvestDict.ContainsKey(key))
            {
                vipInvestDict[key].TryGetValue(index,out rewardlist);
                vipInvestDict[key].TryGetValue(index, out rewardlist);
            }
            return rewardlist;
        }
@@ -186,9 +172,9 @@
            return list;
        }
        public int GetInvestGold(int type,int index)
        public int GetInvestGold(int type, int index)
        {
            if(investGoldDict.ContainsKey(type))
            if (investGoldDict.ContainsKey(type))
            {
                return investGoldDict[type][index];
            }
@@ -198,10 +184,10 @@
        public string GetVipInvestIndex()
        {
            int playeLv = PlayerDatas.Instance.baseData.LV;
            foreach(var index in vipInvestLvlimitDict.Keys)
            foreach (var index in vipInvestLvlimitDict.Keys)
            {
                int[] lvs = vipInvestLvlimitDict[index];
                if(lvs[lvs.Length - 1] >= playeLv)
                if (lvs[lvs.Length - 1] >= playeLv)
                {
                    return index;
                }
@@ -212,7 +198,7 @@
        public int GetMaxDay(InvestType type)
        {
            int day = 0;
            investMaxDayDict.TryGetValue((int)type,out day);
            investMaxDayDict.TryGetValue((int)type, out day);
            return day;
        }
@@ -231,7 +217,7 @@
                    investInfo.type = info.InvestType;
                    investInfo.curDay = (int)info.CurDay;
                    investInfo.investGold = (int)info.InvestGold;
                    if (info.RewardRecordCnt > 1)
                    {
                        investInfo.recordlist = new List<RewardRecord>();
@@ -245,14 +231,14 @@
                        }
                    }
                    else
                    {
                            if (((int)info.CurDay - 1) < investInfo.recordlist.Count)
                            {
                                RewardRecord RewardRecord = new RewardRecord();
                                RewardRecord.rewardIndex = info.InvestRewardList[0].RewardIndex;
                                RewardRecord.rewardRecord = info.InvestRewardList[0].RewardValue;
                                investInfo.recordlist[((int)info.CurDay - 1)] = RewardRecord;
                            }
                    {
                        if (((int)info.CurDay - 1) < investInfo.recordlist.Count)
                        {
                            RewardRecord RewardRecord = new RewardRecord();
                            RewardRecord.rewardIndex = info.InvestRewardList[0].RewardIndex;
                            RewardRecord.rewardRecord = info.InvestRewardList[0].RewardValue;
                            investInfo.recordlist[((int)info.CurDay - 1)] = RewardRecord;
                        }
                    }
                    serverInvestDict.Add(info.InvestType, investInfo);
                }
@@ -279,17 +265,17 @@
                    }
                    else
                    {
                            if (((int)info.CurDay - 1) < serverInvest.recordlist.Count)
                            {
                                RewardRecord RewardRecord = new RewardRecord();
                                RewardRecord.rewardIndex = info.InvestRewardList[0].RewardIndex;
                                RewardRecord.rewardRecord = info.InvestRewardList[0].RewardValue;
                                serverInvest.recordlist[((int)info.CurDay - 1)] = RewardRecord;
                            }
                        if (((int)info.CurDay - 1) < serverInvest.recordlist.Count)
                        {
                            RewardRecord RewardRecord = new RewardRecord();
                            RewardRecord.rewardIndex = info.InvestRewardList[0].RewardIndex;
                            RewardRecord.rewardRecord = info.InvestRewardList[0].RewardValue;
                            serverInvest.recordlist[((int)info.CurDay - 1)] = RewardRecord;
                        }
                    }
                    serverInvestDict[info.InvestType] = serverInvest;
                }
            }
            if (RefreshInvestAct != null)
            {
@@ -304,11 +290,11 @@
        public ServerInvestInfo GetInvestInfoByType(int type)
        {
            ServerInvestInfo investInfo = default(ServerInvestInfo);
            serverInvestDict.TryGetValue(type,out investInfo);
            serverInvestDict.TryGetValue(type, out investInfo);
            return investInfo;
        }
        public void SendGetInvestRewardQuest(int type,int index)
        public void SendGetInvestRewardQuest(int type, int index)
        {
            CA541_tagCMGetInvestReward investReward = new CA541_tagCMGetInvestReward();
            investReward.InvestType = (byte)type;
@@ -320,14 +306,14 @@
        {
            int gold = GetInvestGold(type, index);
            DebugEx.Log("SendInvestQuest:" + gold);
            CA540_tagCMGoldInvest investGold= new CA540_tagCMGoldInvest();
            CA540_tagCMGoldInvest investGold = new CA540_tagCMGoldInvest();
            investGold.InvestType = (byte)type;
            investGold.InvestGold = (uint)gold;
            GameNetSystem.Instance.SendInfo(investGold);
        }
        #endregion
        public RewardRecordState GetRecordByIndex(int type,int day)
        public RewardRecordState GetRecordByIndex(int type, int day)
        {
            ServerInvestInfo investInfo = GetInvestInfoByType(type);
            if (investInfo.investGold <= 0) return RewardRecordState.None;
@@ -348,7 +334,7 @@
                else if (investInfo.curDay < day)
                {
                    return RewardRecordState.NoShow;
                }
                }
                return RewardRecordState.NoReceive;
            }
        }
@@ -407,21 +393,21 @@
            redPointStre1_v3.state = RedPointState.None;
            redPointStre1_v4.state = RedPointState.None;
            redPointStre1.state = RedPointState.None;
            InvestInfo =GetInvestInfoByType((int)InvestType.Vip);
            InvestInfo = GetInvestInfoByType((int)InvestType.Vip);
            cycle = GetInvestCycle(InvestInfo.curDay);
            if (InvestInfo.investGold <= 0)
            {
                cycle = 1;
            }
            configlist = GetInvestConfiglistByCycle(cycle);
            if (configlist ==null)
            if (configlist == null)
            {
                return;
            }
            for (int i = 0; i < configlist.Count; i++)
            {
                InvestConfig config = configlist[i];
                RewardRecordState recordState =GetRecordByIndex((int)InvestType.Vip, config.needDay);
                RewardRecordState recordState = GetRecordByIndex((int)InvestType.Vip, config.needDay);
                if (recordState == RewardRecordState.NoReceive)
                {
                    switch (cycle)
@@ -441,7 +427,7 @@
                        default:
                            break;
                    }
                   // redPointStre1.state = RedPointState.Simple;
                    // redPointStre1.state = RedPointState.Simple;
                    JumpIndex = i;
                    return;
                }
@@ -470,19 +456,37 @@
            }
            if (IsRedpoint)
            {
                if (IsOneRedPoint)
                {
                    redPointStre1.state = RedPointState.Simple;
                    IsOneRedPoint = false;
                }
                redPointStre1.state = RedPointState.Simple;
            }
            else
            {
                VipInvestRedPoint();
            }
        }
        private void IsShowRedPointSimple()
        {
            int GetDayOfYear = DateTime.Now.DayOfYear;
            string strKey = "IsOpenVipRedPoint" + PlayerDatas.Instance.baseData.LV;
            int day = LocalSave.GetInt(strKey);
            if (day != GetDayOfYear)
            {
                if (TimeUtility.CreateDays <= DisplayDays && redPointStre1.state == RedPointState.None
                    && PlayerDatas.Instance.baseData.LV >= DisplayLevel)
                {
                    LocalSave.SetInt(strKey, GetDayOfYear);
                    IsRedpoint = true;
                    RedPointSate();
                }
            }
        }
    }
    public struct InvestReward
    {
        public int id { get; private set; }