local MonthHonorOrder_Model = {} local private = {} local activity_subject_month_op_pb = require("Proto/activity_subject_month_op_pb") local EventSystem = require('Event/EventSystem') MonthHonorOrder_Model.HonorOrderGrade = { Free = 0, Grade1 = 1, Grade2 = 2 } MonthHonorOrder_Model.TaskType = { GameTask = 1, --游戏任务 MonthTask = 2, --月度任务 } function MonthHonorOrder_Model.OnStartup() NetManager.RegisterMsgCB(MessageEnums.MessageGetSubjectMonthBattlePassTask, private.UpdateSubjectMonthBattlePassTaskInfo) NetManager.RegisterMsgCB(MessageEnums.MessageGetSubjectMonthBattlePassTaskReward, private.UpdateSubjectMonthBattlePassTaskInfo) NetManager.RegisterMsgCB(MessageEnums.MessageGetSubjectMonthBattlePassLevelReward, private.GetSubjectMonthBattlePassLevelRewardResp) private.honorOrderInfo = nil private.taskInfo = {} private.activityId = nil private.newLevelForEffect = nil private.newGradeEffectPlayed = {} end function MonthHonorOrder_Model.SyncInfo(info) private.honorOrderInfo = info private.Init(info) EventSystem.Dispatch(EventID.UI_SubjectMonth_UpdateHonorOrderInfo) end function private.Init(info) local activityId = MDL.SubjectMonth.GetActivityId() if private.activityId ~= activityId then private.activityId = activityId private.newLevelForEffect = info.level local honorOrderGrade = MonthHonorOrder_Model.HonorOrderGrade private.newGradeEffectPlayed[honorOrderGrade.Grade1] = MonthHonorOrder_Model.IsUnlockGrade(honorOrderGrade.Grade1) private.newGradeEffectPlayed[honorOrderGrade.Grade2] = MonthHonorOrder_Model.IsUnlockGrade(honorOrderGrade.Grade2) end end function MonthHonorOrder_Model.GetLevel() local info = private.honorOrderInfo if info then return info.level end return 0 end function MonthHonorOrder_Model.IsPlayNewGradeEffect(grade) if not private.newGradeEffectPlayed[grade] and MonthHonorOrder_Model.IsUnlockGrade(grade) then private.newGradeEffectPlayed[grade] = true return true else return false end end function MonthHonorOrder_Model.IsPlayNewLevelEffect() local level = MDL.MonthHonorOrder.GetLevel() if private.newLevelForEffect ~= level then private.newLevelForEffect = level return true end return false end function MonthHonorOrder_Model.GetScore() local info = private.honorOrderInfo if info then return info.score end return 0 end function MonthHonorOrder_Model.HasTaskDone() local info = private.honorOrderInfo if info then return info.hasTaskDone end return false end function MonthHonorOrder_Model.IsLevelRewardReceived(grade, rewardId) local info = private.honorOrderInfo if info then for _, v in ipairs(info.rewardLevel) do if v.grade == grade then for _, vv in ipairs(v.rewardId) do if vv == rewardId then return true end end end end end return false end function MonthHonorOrder_Model.IsUnlockGrade(grade) local info = private.honorOrderInfo if info then for _, v in ipairs(info.boughtGrade) do if grade == v then return true end end end return false end function MonthHonorOrder_Model.GetTaskInfo(type) if type == MonthHonorOrder_Model.TaskType.GameTask then return private.taskInfo and private.taskInfo.gameTask elseif type == MonthHonorOrder_Model.TaskType.MonthTask then return private.taskInfo and private.taskInfo.monthTask end end ---@Req function MonthHonorOrder_Model.GetSubjectMonthBattlePassTaskReq() local msg = activity_subject_month_op_pb.GetSubjectMonthBattlePassTaskReq() msg.activityId = MDL.SubjectMonth.GetActivityId() NetManager.SendMessage(MessageEnums.MessageGetSubjectMonthBattlePassTask, msg) end function MonthHonorOrder_Model.GetSubjectMonthBattlePassTaskRewardReq(taskId, taskType, isAll) local msg = activity_subject_month_op_pb.GetSubjectMonthBattlePassTaskRewardReq() msg.activityId = MDL.SubjectMonth.GetActivityId() msg.taskId = taskId or 0 msg.taskType = taskType or 0 msg.isAll = isAll or false NetManager.SendMessage(MessageEnums.MessageGetSubjectMonthBattlePassTaskReward, msg) end function private.SortTaskData(a, b) if a.taskStatus == b.taskStatus then return a.taskId < b.taskId else return CTL.OACommon.SortByStatus(a.taskStatus, b.taskStatus) end end function private.UpdateSubjectMonthBattlePassTaskInfo(msgResp) if msgResp.Resp.Code == 0 then private.taskInfo.gameTask = msgResp.gameTask table.sort(private.taskInfo.gameTask, private.SortTaskData) private.taskInfo.monthTask = msgResp.monthTask table.sort(private.taskInfo.monthTask, private.SortTaskData) EventSystem.Dispatch(EventID.UI_SubjectMonth_UpdateHonorOrderInfo) end end function MonthHonorOrder_Model.GetSubjectMonthBattlePassLevelRewardReq(grade, level, isAll) local msg = activity_subject_month_op_pb.GetSubjectMonthBattlePassLevelRewardReq() msg.activityId = MDL.SubjectMonth.GetActivityId() msg.grade = grade or 0 msg.level = level or 0 msg.isAll = isAll or false NetManager.SendMessage(MessageEnums.MessageGetSubjectMonthBattlePassLevelReward, msg) end function MonthHonorOrder_Model.GetSubjectMonthBattlePassLevelRewardResp(msgResp) if msgResp.Resp.Code == 0 then EventSystem.Dispatch(EventID.UI_SubjectMonth_UpdateHonorOrderInfo) end end return MonthHonorOrder_Model