local SubjectMonth_Model = {} local private = {} local EventSystem = require('Event/EventSystem') local activity_subject_month_op_pb = require("Proto/activity_subject_month_op_pb") local activity_subject_month_pb = require("Proto/activity_subject_month_pb") SubjectMonth_Model.SubActivityType = { None = activity_subject_month_pb.None, SignIn = activity_subject_month_pb.SignIn, HonorOrder = activity_subject_month_pb.HonorOrder, BossChallenge = activity_subject_month_pb.BossChallenge, Rogue = activity_subject_month_pb.Rogue, } function SubjectMonth_Model.OnStartup() NetManager.RegisterMsgCB(MessageEnums.MessageOpenSubjectMonthPanel, private.OpenSubjectMonthPanelResp) NetManager.RegisterMsgCB(MessageEnums.MessageGetSubjectMonthRankRecord, private.GetSubjectMonthRankRecordResp) private.activityId = nil private.rankInfo = {} end function SubjectMonth_Model.SyncInfo(infos) private.activityId = infos.activityId for _, v in ipairs(infos.changeActivity) do if v == SubjectMonth_Model.SubActivityType.SignIn then MDL.MonthSignIn.SyncInfo(infos.signIn) elseif v == SubjectMonth_Model.SubActivityType.HonorOrder then MDL.MonthHonorOrder.SyncInfo(infos.honorOrder) elseif v == SubjectMonth_Model.SubActivityType.BossChallenge then MDL.MonthBossChallenge.SyncInfo(infos.bossChallenge) elseif v == SubjectMonth_Model.SubActivityType.Rogue then MDL.Rogue.SyncInfo(infos.rogue) end end EventSystem.Dispatch(EventID.UI_SubjectMonth_UpdateSubjectMonthInfo) end function SubjectMonth_Model.GetActivityId() return private.activityId end function SubjectMonth_Model.GetActivityPreviewInfo(id) if not private.matchForeShow then return end for i, v in ipairs(private.matchForeShow) do if v.activityId == id then return v end end end ---@Req 主界面 function SubjectMonth_Model.OpenSubjectMonthPanelReq() local msg = activity_subject_month_op_pb.OpenSubjectMonthPanelReq() msg.activityId = private.activityId NetManager.SendMessage(MessageEnums.MessageOpenSubjectMonthPanel, msg) end function private.OpenSubjectMonthPanelResp(msgResp) if msgResp.Resp.Code == 0 then private.matchForeShow = msgResp.matchForeShow EventSystem.Dispatch(EventID.UI_SubjectMonth_UpdateSubjectMonthPreviewInfo) end end ---@Req 排行榜 function SubjectMonth_Model.GetRankListInfo(type, bossId) if type == SubjectMonth_Model.SubActivityType.BossChallenge or type == SubjectMonth_Model.SubActivityType.Rogue then if private.rankInfo[type] and private.rankInfo[type][bossId] then return private.rankInfo[type][bossId].records end end end function SubjectMonth_Model.GetMyRankInfo(type, bossId) if type == SubjectMonth_Model.SubActivityType.BossChallenge or type == SubjectMonth_Model.SubActivityType.Rogue then if private.rankInfo[type] and private.rankInfo[type][bossId] then return private.rankInfo[type][bossId].myRank end end end function SubjectMonth_Model.CheckIfRankNeedsRefresh(rankPersonalInfo) return rankPersonalInfo.nextRefreshTime < UTL.Time.GetServerTimestamp() end function SubjectMonth_Model.GetSubjectMonthRankRecordReq(type, bossId, onlyMyRank) local msg = activity_subject_month_op_pb.GetSubjectMonthRankRecordReq() msg.activityId = private.activityId msg.activityTyp = type msg.bossId = bossId or 0 msg.onlyMyRank = onlyMyRank or false NetManager.SendMessage(MessageEnums.MessageGetSubjectMonthRankRecord, msg) end function private.GetSubjectMonthRankRecordResp(msgResp) if msgResp.Resp.Code == 0 then if msgResp.activityTyp == SubjectMonth_Model.SubActivityType.BossChallenge or msgResp.activityTyp == SubjectMonth_Model.SubActivityType.Rogue then if not private.rankInfo[msgResp.activityTyp] then private.rankInfo[msgResp.activityTyp] = {} end private.rankInfo[msgResp.activityTyp][msgResp.bossId] = msgResp.perRankInfo end end EventSystem.Dispatch(EventID.UI_SubjectMonth_UpdateRankInfo) end return SubjectMonth_Model