From 3a6fea4b9598bf899de808e465915cec7d4eaa6f Mon Sep 17 00:00:00 2001
From: client_Zxw <826696702@qq.com>
Date: 星期五, 18 一月 2019 15:23:04 +0800
Subject: [PATCH] 5314 子 【1.5.100】登录奖励活动

---
 System/OpenServerActivity/LoginRewardModel.cs |  228 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 226 insertions(+), 2 deletions(-)

diff --git a/System/OpenServerActivity/LoginRewardModel.cs b/System/OpenServerActivity/LoginRewardModel.cs
index 9f781b3..2d19366 100644
--- a/System/OpenServerActivity/LoginRewardModel.cs
+++ b/System/OpenServerActivity/LoginRewardModel.cs
@@ -10,6 +10,14 @@
 [XLua.LuaCallCSharp]
 public class LoginRewardModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk
 {
+    public event Action LoginAwardInfoUpdate;//棰嗗璁板綍鍙樻洿 
+    public Dictionary<int, WeekPartyDayInfoClass> LoginAwardInfoDic = new Dictionary<int, WeekPartyDayInfoClass>();//棰嗗淇℃伅
+    public Dictionary<int, WeekPartyDayClass> LoginAwardDayDic = new Dictionary<int, WeekPartyDayClass>();//姣忓ぉ鐨勫鍔变俊鎭�
+    public Dictionary<int, WeekPartyActionClass> LoginAwardDic = new Dictionary<int, WeekPartyActionClass>();//娲诲姩妯℃澘淇℃伅
+    public Dictionary<int, Redpoint> RedPointDic = new Dictionary<int, Redpoint>();//绾㈢偣
+    public int LimitLV = 0;//闄愬埗绛夌骇
+    private const int Redpoint_key = 6666;//鍛ㄧ媯娆㈢孩鐐�
+    public Redpoint redPointStre = new Redpoint(666, Redpoint_key);
     public override void Init()
     {
       
@@ -17,18 +25,234 @@
 
     public void OnBeforePlayerDataInitialize()
     {
-        
+        LoginAwardInfoDic.Clear();
     }
 
     public void OnPlayerLoginOk()
     {
-       
+        SetRedPoint();
     }
 
     public override void UnInit()
     {
         
     }
+
+    public void LoginAwardInfo(HAA0C_tagMCActLoginAwardInfo info)//鐧诲綍濂栧姳娲诲姩淇℃伅
+    {
+        LimitLV = info.LimitLV;
+        LoginAwardDayDic.Clear();
+        LoginAwardDic.Clear();
+        for (int i = 0; i < info.DayCnt; i++)//姣忓ぉ鐨勫鍔变俊鎭�
+        {
+            int Index = i;
+            var dayInfo = info.DayInfoList[i];
+            WeekPartyDayClass loginAwardDay = new WeekPartyDayClass();
+            loginAwardDay.TemplateList = new int[dayInfo.ActCnt];
+            for (int k = 0; k < dayInfo.ActCnt; k++)
+            {
+                loginAwardDay.TemplateList[k] = dayInfo.TemplateList[k];
+            }
+            if (LoginAwardDayDic.ContainsKey(Index))
+            {
+                LoginAwardDayDic[Index] = loginAwardDay;
+            }
+            else
+            {
+                LoginAwardDayDic.Add(Index, loginAwardDay);
+            }
+        }
+
+        for (int i = 0; i < info.TCount; i++)// 娲诲姩妯℃澘淇℃伅
+        {
+            var ActionInfo = info.ActionInfo[i];
+            var templateID = (int)ActionInfo.TemplateID;
+            WeekPartyActionClass loginAward = new WeekPartyActionClass();
+            loginAward.TemplateID = (int)ActionInfo.TemplateID;
+            loginAward.ActionType = (int)ActionInfo.ActionType;
+            loginAward.TotalTimes = (int)ActionInfo.TotalTimes;
+            loginAward.SingleTimes = (int)ActionInfo.SingleTimes;
+            loginAward.WeekPartyItem = new WeekPartyItemClass[ActionInfo.Count];
+            for (int z = 0; z < ActionInfo.Count; z++)
+            {
+                var item = ActionInfo.ItemInfo[z];
+                WeekPartyItemClass loginAwardItem = new WeekPartyItemClass();
+                loginAwardItem.ItemID = (int)item.ItemID;
+                loginAwardItem.ItemCnt = (int)item.ItemCnt;
+                loginAwardItem.IsBind = item.IsBind;
+                loginAward.WeekPartyItem[z] = loginAwardItem;
+            }
+            if (LoginAwardDic.ContainsKey(templateID))
+            {
+                LoginAwardDic[templateID] = loginAward;
+            }
+            else
+            {
+                LoginAwardDic.Add(templateID, loginAward);
+            }
+        }
+    }
+
+    public void LoginAwardPlayerInfo(HAA0D_tagMCActLoginAwardPlayerInfo info)//鐧诲綍濂栧姳鐜╁娲诲姩淇℃伅
+    {
+        for (int i = 0; i < info.Count; i++)
+        {
+            var Dayinfo = info.DayInfoList[i];
+            WeekPartyDayInfoClass loginAwardPlayerClass = new WeekPartyDayInfoClass();
+            var dayindex = (int)Dayinfo.DayIndex;
+            loginAwardPlayerClass.DayIndex = dayindex;
+            if (LoginAwardInfoDic.ContainsKey(dayindex))
+            {
+                var dit = LoginAwardInfoDic[dayindex];
+                dit.DayIndex = dayindex;
+                for (int j = 0; j < dit.ActionType.Length; j++)
+                {
+                    if (dit.ActionType[j].TemplateID == Dayinfo.TaskList[0].TemplateID)
+                    {
+                        ActionTypeClass ActionType = new ActionTypeClass();
+                        ActionType.TemplateID = Dayinfo.TaskList[0].TemplateID;
+                        ActionType.CurTimes = Dayinfo.TaskList[0].CurTimes;
+                        ActionType.GotTimes = Dayinfo.TaskList[0].GotTimes;
+                        dit.ActionType[j] = ActionType;
+                    }
+
+                }
+                LoginAwardInfoDic[dayindex] = dit;
+            }
+            else
+            {
+                loginAwardPlayerClass.ActionType = new ActionTypeClass[Dayinfo.ACount];
+                for (int k = 0; k < Dayinfo.ACount; k++)
+                {
+                    var Task = Dayinfo.TaskList[k];
+                    ActionTypeClass ActionType = new ActionTypeClass();
+                    ActionType.TemplateID = Task.TemplateID;
+                    ActionType.CurTimes = Task.CurTimes;
+                    ActionType.GotTimes = Task.GotTimes;
+                    LoginAwardInfoDic.Add(dayindex, loginAwardPlayerClass);
+                }
+            }
+        }
+        SetRedPoint();
+        if (LoginAwardInfoUpdate != null)
+        {
+            LoginAwardInfoUpdate();
+        }
+    }
+
+    public int GetRewardNumber(int Day, int ID)//鑾峰彇棰嗗娆℃暟
+    {
+        int Num = 0;
+        if (LoginAwardInfoDic.ContainsKey(Day))
+        {
+            var loginAward = LoginAwardInfoDic[Day];
+            for (int i = 0; i < loginAward.ActionType.Length; i++)
+            {
+                var ActionType = loginAward.ActionType[i];
+                if (ID == ActionType.TemplateID)
+                {
+                    Num = ActionType.GotTimes;
+                }
+            }
+        }
+        return Num;
+    }
+
+    public int GetCarryOutNum(int Day,int ID)//鑾峰彇宸插畬鎴愭鏁�
+    {
+        int Num = 0;
+        if (LoginAwardInfoDic.ContainsKey(Day))
+        {
+            var loginAward = LoginAwardInfoDic[Day];
+            for (int i = 0; i < loginAward.ActionType.Length; i++)
+            {
+                var ActionType = loginAward.ActionType[i];
+                if (ID == ActionType.TemplateID)
+                {
+                    Num = ActionType.CurTimes;
+                }
+            }
+        }
+        return Num;
+    }
+
+    public void SendLoginAwardInfo(int day, int temdayplateID)//棰嗗彇濂栧姳
+    {
+        CA504_tagCMPlayerGetReward getReward = new CA504_tagCMPlayerGetReward();
+        getReward.RewardType = (byte)GotServerRewardType.Def_RewardType_ActLoginAwardAct;
+        getReward.DataEx = (uint)day;
+        string StrID = temdayplateID.ToString();
+        getReward.DataExStrLen = (byte)StrID.Length;
+        getReward.DataExStr = StrID;
+        GameNetSystem.Instance.SendInfo(getReward);
+    }
+
+    private void SetRedPoint()//绾㈢偣璁剧疆
+    {
+        SetRedPointID();
+        foreach (var key in RedPointDic.Keys)
+        {
+            RedPointDic[key].state = RedPointState.None;
+        }
+        foreach (var key in RedPointDic.Keys)
+        {
+            RedPointDic[key].state = SetRedPointState(key);
+        }
+    }
+    private void SetRedPointID()//璁剧疆绾㈢偣ID
+    {
+        if (RedPointDic.Count > 0)
+        {
+            return;
+        }
+        foreach (var key in LoginAwardInfoDic.Keys)
+        {
+            int RedPoint = Redpoint_key * 10 + key;
+            if (!RedPointDic.ContainsKey(key))
+            {
+                Redpoint redPointMountStare = new Redpoint(Redpoint_key, RedPoint);
+                RedPointDic.Add(key, redPointMountStare);
+            }
+        }
+    }
+
+    private RedPointState SetRedPointState(int day)//绾㈢偣鐘舵�佽缃�
+    {
+        if (!LoginAwardDayDic.ContainsKey(day) || !LoginAwardInfoDic.ContainsKey(day))
+        {
+            return RedPointState.None;
+        }
+        WeekPartyDayClass loginAward = new WeekPartyDayClass();
+        foreach (var key in LoginAwardDayDic.Keys)
+        {
+            if (key == day)
+            {
+                loginAward = LoginAwardDayDic[key];
+            }
+        }
+        for (int i = 0; i < loginAward.TemplateList.Length; i++)
+        {
+            var TemplateID = loginAward.TemplateList[i];
+            if (LoginAwardDic.ContainsKey(TemplateID))
+            {
+                var LoginAward = LoginAwardDic[TemplateID];
+                int number = LoginAward.TotalTimes / LoginAward.SingleTimes;
+                int rewardNum = GetRewardNumber(day, TemplateID);//宸查濂栨鏁�
+                int carryOutNum = GetCarryOutNum(day, TemplateID);//宸插畬鎴愭鏁�
+                int TaypeNumber = 0;
+                if (carryOutNum - rewardNum > 0)
+                {
+                    TaypeNumber = (carryOutNum - rewardNum) / LoginAward.SingleTimes;
+                }
+                if (TaypeNumber > 0 && rewardNum < number)
+                {
+                    return RedPointState.GetReward;
+                }
+            }
+
+        }
+        return RedPointState.None;
+    }
 }
 
 

--
Gitblit v1.8.0