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