local HonorOrder_Model = {} local private = {} local honor_order_opt_pb = require("Proto/honor_order_opt_pb") local EventSystem = require('Event/EventSystem') HonorOrder_Model.TaskType = { Daily = 1, -- 日常挑战 Cycle = 2, -- 周期挑战 Extra = 3, } HonorOrder_Model.GrandType = { LightEffect = 0, -- 光效 Fashion = 1, -- 外观 } HonorOrder_Model.RewardType = { Ordinary = 1, -- 普通奖励 Advanced = 2, -- 高级奖励 } -- 排序:id local function SortLevel(level_1, level_2) return level_1 < level_2 end function HonorOrder_Model.OnStartup() NetManager.RegisterMsgCB(MessageEnums.MessageHonorOrderAwardBuyLv, private.HonorOrderAwardBuyLvResponse) -- 战令奖励-购买等级 NetManager.RegisterMsgCB(MessageEnums.MessageHonorOrderAwardGet, private.HonorOrderAwardGetResponse) -- 战令奖励-领取奖励 NetManager.RegisterMsgCB(MessageEnums.MessageHonorOrderAwardAutoGet, private.HonorOrderAwardAutoGetResponse) -- 战令奖励-一键领取 NetManager.RegisterMsgCB(MessageEnums.MessageHonorOrderGetTaskList, private.HonorOrderGetTaskListResponse) -- 战令挑战-列表 NetManager.RegisterMsgCB(MessageEnums.MessageHonorOrderGetTaskAward,private.HonorOrderGetTaskAwardResponse) -- 战令挑战-领奖 NetManager.RegisterMsgCB(MessageEnums.MessageHonorOrderAutoTaskAward,private.HonorOrderAutoTaskAwardResponse) -- 战令挑战-一键领奖 -- 战令动态数据 HonorOrder_Model.HonorOrderActivityId = 0 HonorOrder_Model.HonorOrderId = 0 private.HonorInfo = {} -- 战令奖励数据 private.TaskListByTypeDic = {} -- 战令挑战字典,可key:类型 HonorOrder_Model.CurOpenSubView = 0 -- 当前打开的子界面 HonorOrder_Model.CurOpenChallengeToggleID = 0 -- 挑战界面选中的页签 end function private.IsChallengeFinish() local time = HonorOrder_Model.GetCurHonorOrderEndTime() - UTL.Time.GetServerTimestamp() if time > 0 then return false else return true end end --region ********************* 外部获取数据接口 ********************* function HonorOrder_Model.GetTaskListByType(taskType) return private.TaskListByTypeDic[taskType] end ---@public 获取当前战令奖励数据 function HonorOrder_Model.GetAwardInfo() return private.HonorInfo end ---@public 获取当前战令的静态数据 function HonorOrder_Model.GetCurHonorOrderConstData() return MDL.OperationActivity.HonorOrderConst:GetDataByActivityID_ID(HonorOrder_Model.HonorOrderActivityId, private.HonorInfo.HonorOrderId) end ---@public 获得本期活动结束时间戳 function HonorOrder_Model.GetCurHonorOrderEndTime() local constCfg = HonorOrder_Model.GetCurHonorOrderConstData() if constCfg then return constCfg.Open + constCfg.Duration * UTL.Time.TotalSecondsOneDay end return 0 end ---@public 本期活动是否开启 function HonorOrder_Model.GetCurHonorOrderIsOpen() local endTime = HonorOrder_Model.GetCurHonorOrderEndTime() return endTime - UTL.Time.GetServerTimestamp() > 0 end ---@public 获取当前战令大奖信息 function HonorOrder_Model.GetGrandRewardInfo() local rewardList = MDL.OperationActivity.HonorOrderReward:GetDataByActivityID_HonorOrderID_RewardID(private.HonorInfo.ActivityId, private.HonorInfo.HonorOrderId) for k,v in pairs(rewardList) do if v.Grand == 1 then return v end end return nil end ---@public 获取当前战令节点奖励数组 function HonorOrder_Model.GetSeniorRewardInfoList() local seniorRewardList = {} local rewardList = MDL.OperationActivity.HonorOrderReward:GetDataByActivityID_HonorOrderID_RewardID(private.HonorInfo.ActivityId, private.HonorInfo.HonorOrderId) for k,v in pairs(rewardList) do if v.Node == 1 then table.insert(seniorRewardList, v) end end return seniorRewardList end ---@public 可购买等级数量 function HonorOrder_Model.GetBuyHonorOrderLevelNum() local curHonorOrderConstData = HonorOrder_Model.GetCurHonorOrderConstData() return curHonorOrderConstData.MaxLevel - private.HonorInfo.HonorLv end ---@public 是否已领取 function HonorOrder_Model.IsAlreadyReceivedByRewardType_Level(rewardType, level) local rewardList = {} if rewardType == HonorOrder_Model.RewardType.Ordinary then -- 普通奖励 rewardList = private.HonorInfo.CommonRewards elseif rewardType == HonorOrder_Model.RewardType.Advanced then -- 典藏奖励 rewardList = private.HonorInfo.SeniorRewards end table.sort(rewardList, SortLevel) for k,v in ipairs(rewardList) do if v == level then return true end end return false end ---@public 最近可领取的等级 function HonorOrder_Model.GetMoveIndex() local CommonRewardIndex = 0 table.sort(private.HonorInfo.CommonRewards, SortLevel) for k,v in ipairs(private.HonorInfo.CommonRewards) do if v ~= k then CommonRewardIndex = k break end end if CommonRewardIndex == 0 then CommonRewardIndex = #private.HonorInfo.CommonRewards +1 end if private.HonorInfo.IsSenior then local SeniorRewardIndex = 0 table.sort(private.HonorInfo.SeniorRewards, SortLevel) for k,v in ipairs(private.HonorInfo.SeniorRewards) do if v ~= k then SeniorRewardIndex = k break end end if SeniorRewardIndex == 0 then SeniorRewardIndex = #private.HonorInfo.SeniorRewards + 1 end return CommonRewardIndex < SeniorRewardIndex and CommonRewardIndex or SeniorRewardIndex end return CommonRewardIndex end ---@public 是否可领取 function HonorOrder_Model.IsCanReceiveByRewardType_Level(type, level) local curLevel = private.HonorInfo.HonorLv if level <= curLevel then local getList if type == HonorOrder_Model.RewardType.Ordinary then getList = private.HonorInfo.CommonRewards elseif type == HonorOrder_Model.RewardType.Advanced then getList = private.HonorInfo.SeniorRewards end for k,v in ipairs(getList) do if level == v then return false end end return true end return false end ---@public 是否有可领取奖励 function HonorOrder_Model.HaveCanReceive() for i = 1, private.HonorInfo.HonorLv do local level = MDL.OperationActivity.HonorOrderReward:GetDataByActivityID_HonorOrderID_RewardID(private.HonorInfo.ActivityId, private.HonorInfo.HonorOrderId, i).RewardID if HonorOrder_Model.IsCanReceiveByRewardType_Level(HonorOrder_Model.TaskType.Daily, level) or (private.HonorInfo.IsSenior and HonorOrder_Model.IsCanReceiveByRewardType_Level(HonorOrder_Model.TaskType.Cycle, level)) then return true end end if private.HonorInfo.HonorLv == HonorOrder_Model.GetCurHonorOrderConstData().MaxLevel and private.HonorInfo.HonorExp >= HonorOrder_Model.GetCurHonorOrderConstData().EachLevelExp then return true end return false end --endregion ****************** 外部获取数据接口 ********************* --region **************** 协议 ******************* --region ******************* 战令奖励 ************** function HonorOrder_Model.SyncHonorOrderAwardInfo(info) if info.ActivityId ~= 0 then logging.log(LTAG.LOG, "战令信息 SyncHonorOrderAwardInfo ", info) HonorOrder_Model.HonorOrderActivityId = info.ActivityId HonorOrder_Model.HonorOrderId = info.HonorOrderId private.HonorInfo = info if HonorOrder_Model.GetCurHonorOrderIsOpen() and HonorOrder_Model.HaveCanReceive() and not private.IsChallengeFinish() then CTL.RedPoint.AddRedPoint(CTL.RedPoint.RedPointKey.HonorOrder_Reward) else CTL.RedPoint.RemoveRedPoint(CTL.RedPoint.RedPointKey.HonorOrder_Reward) end if private.HonorInfo.IsSenior then EventSystem.Dispatch(EventID.UI_HonorOrder_IsSenior) end EventSystem.Dispatch(EventID.UI_HonorOrder_RefreshRewardInfo) end end ---@public 战令奖励-领取奖励 function HonorOrder_Model.HonorOrderAwardGetRequest(awardType, honorLv) local msg = honor_order_opt_pb.HonorOrderAwardGetReq() msg.awardType = awardType msg.honorLv = honorLv NetManager.SendMessage(MessageEnums.MessageHonorOrderAwardGet, msg) end function private.HonorOrderAwardGetResponse(msgResp) logging.log(LTAG.LOG, "HonorOrderAwardGetResponse") CTL.Tips.AddTipsMsg(Const_IDS["IDS_AwardReceive_Success"]) -- 领取成功 end ---@public 战令奖励-购买等级 function HonorOrder_Model.HonorOrderAwardBuyLvRequest(buyNum) local msg = honor_order_opt_pb.HonorOrderAwardBuyLvReq() msg.BuyNum = buyNum NetManager.SendMessage(MessageEnums.MessageHonorOrderAwardBuyLv, msg) end function private.HonorOrderAwardBuyLvResponse(msgResp) logging.log(LTAG.LOG, "HonorOrderAwardBuyLvResponse") CTL.Tips.AddTipsMsg(Const_IDS["IDS_Appearance_ShengJiChengGong"]) -- 购买成功 end ---@public 战令奖励-一键领取 function HonorOrder_Model.HonorOrderAwardAutoGetRequest() local msg = honor_order_opt_pb.HonorOrderAwardAutoGetReq() NetManager.SendMessage(MessageEnums.MessageHonorOrderAwardAutoGet, msg) end function private.HonorOrderAwardAutoGetResponse(msgResp) logging.log(LTAG.LOG, "HonorOrderAwardAutoGetResponse") CTL.Tips.AddTipsMsg(Const_IDS["IDS_AwardReceive_Success"]) -- 领取成功 end --endregion ***************** 战令奖励 ********************* --region **************** 战令挑战 ************************ ---@public 日常挑战 function HonorOrder_Model.SyncHonorOrderDailyTaskList(msgResp) private.TaskListByTypeDic[HonorOrder_Model.TaskType.Daily] = {} for k,v in ipairs(msgResp) do table.insert(private.TaskListByTypeDic[HonorOrder_Model.TaskType.Daily], v) end if HonorOrder_Model.GetCurHonorOrderIsOpen() and not private.IsChallengeFinish() then for k,v in pairs(private.TaskListByTypeDic[HonorOrder_Model.TaskType.Daily]) do if v.State == 1 then CTL.RedPoint.AddRedPoint(CTL.RedPoint.RedPointKey.HonorOrder_Challenge_Daily) EventSystem.Dispatch(EventID.UI_HonorOrder_RefreshChallenge) return end end end CTL.RedPoint.RemoveRedPoint(CTL.RedPoint.RedPointKey.HonorOrder_Challenge_Daily) EventSystem.Dispatch(EventID.UI_HonorOrder_RefreshChallenge) end ---@public 周期挑战 function HonorOrder_Model.SyncHonorOrderCycleTaskList(msgResp) private.TaskListByTypeDic[HonorOrder_Model.TaskType.Cycle] = {} for k,v in ipairs(msgResp) do table.insert(private.TaskListByTypeDic[HonorOrder_Model.TaskType.Cycle], v) end if HonorOrder_Model.GetCurHonorOrderIsOpen() and not private.IsChallengeFinish() then for k,v in pairs(private.TaskListByTypeDic[HonorOrder_Model.TaskType.Cycle]) do if v.State == 1 then CTL.RedPoint.AddRedPoint(CTL.RedPoint.RedPointKey.HonorOrder_Challenge_Cycle) EventSystem.Dispatch(EventID.UI_HonorOrder_RefreshChallenge) return end end end CTL.RedPoint.RemoveRedPoint(CTL.RedPoint.RedPointKey.HonorOrder_Challenge_Cycle) EventSystem.Dispatch(EventID.UI_HonorOrder_RefreshChallenge) end ---@public 战令挑战-列表 function HonorOrder_Model.HonorOrderGetTaskListRequest() local msg = honor_order_opt_pb.HonorOrderGetTaskListReq() NetManager.SendMessage(MessageEnums.MessageHonorOrderGetTaskList, msg) end function private.HonorOrderGetTaskListResponse(msgResp) logging.log(LTAG.LOG, "HonorOrderGetTaskListResponse") HonorOrder_Model.SyncHonorOrderDailyTaskList(msgResp.DailyTaskInfos) HonorOrder_Model.SyncHonorOrderCycleTaskList(msgResp.CycleTaskInfos) end ---@public 战令挑战-领奖 function HonorOrder_Model.HonorOrderGetTaskAwardRequest(taskType, taskID) local msg = honor_order_opt_pb.HonorOrderGetTaskAwardReq() msg.TaskType = taskType msg.TaskId = taskID NetManager.SendMessage(MessageEnums.MessageHonorOrderGetTaskAward, msg) end function private.HonorOrderGetTaskAwardResponse(msgResp) logging.log(LTAG.LOG, "HonorOrderGetTaskAwardResponse") EventSystem.Dispatch(EventID.UI_HonorOrder_RefreshChallenge) end ---@public 战令挑战-一键领奖 function HonorOrder_Model.HonorOrderAutoTaskAwardRequest() local msg = honor_order_opt_pb.HonorOrderAutoTaskAwardReq() NetManager.SendMessage(MessageEnums.MessageHonorOrderAutoTaskAward, msg) end function private.HonorOrderAutoTaskAwardResponse(msgResp) logging.log(LTAG.LOG, "HonorOrderAutoTaskAwardResponse") EventSystem.Dispatch(EventID.UI_HonorOrder_RefreshChallenge) end --endregion ***************** 战令挑战 ********************* --endregion ********************* 协议 ************************ return HonorOrder_Model