//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Monday, December 10, 2018 //-------------------------------------------------------- using System; using System.Collections.Generic; using Snxxz.UI; //登录奖励 [XLua.LuaCallCSharp] public class LoginRewardModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk { public event Action LoginAwardInfoUpdate;//领奖记录变更 public Dictionary LoginAwardInfoDic = new Dictionary();//领奖信息 public Dictionary LoginAwardDayDic = new Dictionary();//每天的奖励信息 public Dictionary LoginAwardDic = new Dictionary();//活动模板信息 public Dictionary RedPointDic = new Dictionary();//红点 public int DayNow = 0;//当前天 public int SelectedNow = 0;//获取选择天 public int LimitLV = 0;//限制等级 private const int Redpoint_key = 6666;//登录奖励红点 public Redpoint redPointStre = new Redpoint(666, Redpoint_key); public override void Init() { } public void OnBeforePlayerDataInitialize() { LoginAwardInfoDic.Clear(); } public void OnPlayerLoginOk() { GetDay(); 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 < Dayinfo.ACount; j++) { var taskList = Dayinfo.TaskList[j]; int Index = dit.ActionType.FindIndex(s => s.TemplateID == taskList.TemplateID); if (Index != -1) { dit.ActionType[Index].CurTimes = taskList.CurTimes; dit.ActionType[Index].GotTimes = taskList.GotTimes; } else { ActionTypeClass ActionType = new ActionTypeClass(); ActionType.TemplateID = taskList.TemplateID; ActionType.CurTimes = taskList.CurTimes; ActionType.GotTimes = taskList.GotTimes; dit.ActionType.Add(ActionType); } } LoginAwardInfoDic[dayindex] = dit; } else { loginAwardPlayerClass.ActionType = new List(); 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; loginAwardPlayerClass.ActionType.Add(ActionType); } 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.Count; 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.Count; 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; } private void GetDay() { OperationBase operationBase; if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.LoginReward, out operationBase)) { DayNow = (operationBase as EventDaysTime).GetInDayNow(); } } }