//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Monday, December 10, 2018 //-------------------------------------------------------- using System; using System.Collections.Generic; using vnxbqy.UI; //登录奖励 public class LoginRewardModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk, IOpenServerActivity { public event Action LoginAwardInfoUpdate;//领奖记录变更 public event Action onStateUpdate; public Dictionary LoginAwardInfoDic = new Dictionary();//领奖信息 public Dictionary LoginAwardDayDic = new Dictionary();//每天的奖励信息 public Dictionary LoginAwardDic = new Dictionary();//活动模板信息 public Dictionary RedPointDic = new Dictionary();//红点 private Dictionary WorldLvDic = new Dictionary();//世界等级 public int DayNow = 0;//当前天 public int SelectedNow = 0;//获取选择天 public int LimitLV = 0;//限制等级 private const int Redpoint_key = 20921;//登录奖励红点 public Redpoint redPointStre = new Redpoint(209, Redpoint_key); public bool IsOpen { get { return OperationTimeHepler.Instance.SatisfyOpenCondition(Operation.LoginReward); } } public bool IsAdvance { get { return OperationTimeHepler.Instance.SatisfyAdvanceCondition(Operation.LoginReward); } } public bool priorityOpen { get { if (redPointStre.state == RedPointState.GetReward || redPointStre.state == RedPointState.Simple) { return true; } else { return false; } } } public override void Init() { OpenServerActivityCenter.Instance.Register(21, this); OperationTimeHepler.Instance.operationEndEvent += OperationEndEvent; } public void OnBeforePlayerDataInitialize() { LoginAwardInfoDic.Clear(); LoginAwardDayDic.Clear(); LoginAwardDic.Clear(); WorldLvDic.Clear(); } public void OnPlayerLoginOk() { GetDay(); SetRedPoint(); OperationTimeHepler.Instance.operationStartEvent -= OperationStartEvent; OperationTimeHepler.Instance.dayResetEvent -= DayResetEvent; OperationTimeHepler.Instance.operationStartEvent += OperationStartEvent; OperationTimeHepler.Instance.dayResetEvent += DayResetEvent; } private void OperationEndEvent(Operation arg1, int arg2) { if (arg1 == Operation.LoginReward && arg2 == 0) { if (onStateUpdate != null) { onStateUpdate(21); } } } private void DayResetEvent(int obj) { if (obj == (int)Operation.LoginReward) { GetDay(); SetRedPoint(); if (onStateUpdate != null) { onStateUpdate(21); } } } private void OperationStartEvent(Operation arg1, int arg2) { if (arg1 == Operation.LoginReward) { GetDay(); SetRedPoint(); if (arg2 == 0 && onStateUpdate != null) { onStateUpdate(21); } } } 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]; if (!WorldLvDic.ContainsKey(Index)) { WorldLvDic.Add(Index, dayInfo.WorldLV); } 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; string ItemInfoJason = ActionInfo.ItemInfo; loginAward.ItemJson = ItemInfoJason; // loginAward.WeekPartyItem = GetLoginrewardItemList(i, ItemInfoJason); //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 WeekPartyItemClass[] GetLoginrewardItemList(int index, string jsonStr) { int count = 1; var jsonData = LitJson.JsonMapper.ToObject(jsonStr); Dictionary dic = new Dictionary(); foreach (var key in jsonData.Keys) { var worldLv = int.Parse(key); var itemArray = LitJson.JsonMapper.ToObject(jsonData[key].ToJson()); WeekPartyItemClass[] loginrewardItem = new WeekPartyItemClass[itemArray.Length]; count = itemArray.Length; for (int j = 0; j < itemArray.Length; j++) { WeekPartyItemClass loginAwardItem = new WeekPartyItemClass(); loginAwardItem.ItemID = itemArray[j][0]; loginAwardItem.ItemCnt = itemArray[j][1]; loginAwardItem.IsBind = itemArray[j][2]; loginrewardItem[j] = loginAwardItem; } dic.Add(worldLv, loginrewardItem); } int lv = 0; int type = 10000; if (WorldLvDic.ContainsKey(index)) { lv = WorldLvDic[index]; } WeekPartyItemClass[] Item = new WeekPartyItemClass[count]; foreach (var key in dic.Keys) { if (key > lv && type > key) { type = key; Item = dic[key]; } } return Item; } 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); } } GetDay(); 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 >= 7) { 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; } public void GetDay() { OperationBase operationBase; if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.LoginReward, out operationBase)) { int inday = (operationBase as EventDaysTime).GetInDayNow(); if (LoginAwardInfoDic.Count <= 0 && inday <= 0) { DayNow = 0; } else if (inday >= 0 && LoginAwardInfoDic.Count > 0 && inday < LoginAwardInfoDic.Count) { DayNow = inday; } else if (LoginAwardInfoDic.Count > 0 && inday >= LoginAwardInfoDic.Count) { DayNow = LoginAwardInfoDic.Count - 1; } } } public bool IsOpenFeatures() { bool Isbool = false; Isbool = (OperationTimeHepler.Instance.SatisfyOpenCondition(Operation.LoginReward) || OperationTimeHepler.Instance.SatisfyAdvanceCondition(Operation.LoginReward)); return Isbool; } public bool IsJumpOpen()//是否都能执行跳转 { bool Isbool = IsOpenFeatures(); if (!Isbool) { SysNotifyMgr.Instance.ShowTip("OutofActivityTime"); } return Isbool; } }