local SuperGoldHonorOrder_Model = {} local private = {} local EventSystem = require('Event/EventSystem') local sub_honor_order_opt_pb = require("Proto/sub_honor_order_opt_pb") -- 排序:id local function SortLevel(level_1, level_2) return level_1 < level_2 end function SuperGoldHonorOrder_Model.OnStartup() NetManager.RegisterMsgCB(MessageEnums.MessageClaimSubOrderReward, private.ClaimSubOrderRewardResponse) -- 获取战令奖励 NetManager.RegisterMsgCB(MessageEnums.MessageClaimAllSubOrderReward, private.ClaimAllSubOrderRewardResponse) -- 一键领取战令奖励 EventSystem.Regist(EventID.UI_OACommon_RedPointChanged, private.SetSuperGoldHonorOrderRedPoint) private.ActivityType = MDL.OperationActivity.ActivityType.SuperGold private.SuperGoldHonorOrderDict = {} private.initRedPointList = {} -- 初始化红点树的活动ID数组 end -- 获取战令当前等级 function private.GetHonorOrderCurLevelByExp(honorOrderID, curExp) local curLevel = 0 for k,v in DataSheetManager.SuperGoldHonorOrderReward[honorOrderID]:GetEnumerator() do if curExp >= v.Exp then curLevel = v.RewardID end end return curLevel end function private.SetSuperGoldHonorOrderRedPoint() for k,v in pairs(private.SuperGoldHonorOrderDict) do local rpKeys = CTL.SuperGoldMain.RpEventId[v.ActivityId] local isHasAchievementReward = SuperGoldHonorOrder_Model.CheckRedPoint(v.ActivityId) and MDL.SuperGoldMain.IsActivityInFuncTime(v.ActivityId) MDL.RedPoint.UpdateNodeStateByLogicParams(isHasAchievementReward, rpKeys.TownHome, rpKeys.HonorOrder) end end --region ********************* 外部获取数据接口 ********************* ---@public 获取指定活动ID的战令数据 function SuperGoldHonorOrder_Model.GetServerInfoByActivityID(activityId) return private.SuperGoldHonorOrderDict[activityId] end ---@public 获取当前战令的静态数据 function SuperGoldHonorOrder_Model.GetCurHonorOrderConstData(HonorOrderId) return DataSheetManager.SuperGoldHonorOrderData:GetDataByID(HonorOrderId) end ---@public 本期活动是否开启 function SuperGoldHonorOrder_Model.GetCurHonorOrderIsOpen(activityId) local endTime = MDL.OperationActivity.GetOperationActivityInfo(private.ActivityType, activityId).endTime return endTime - UTL.Time.GetServerTimestamp() > 0 end ---@public 最近可领取的等级 function SuperGoldHonorOrder_Model.GetMoveIndex(activityId) local CommonRewardIndex = 0 local commonRewardList = private.SuperGoldHonorOrderDict[activityId].CommonRewards table.sort(commonRewardList, SortLevel) for k,v in ipairs(commonRewardList) do if v ~= k then CommonRewardIndex = k break end end if CommonRewardIndex == 0 then CommonRewardIndex = #commonRewardList +1 end if SuperGoldHonorOrder_Model.GetServerInfoByActivityID(activityId).IsSenior then local SeniorRewardIndex = 0 local seniorRewardList = private.SuperGoldHonorOrderDict[activityId].SeniorRewards table.sort(seniorRewardList, SortLevel) for k,v in ipairs(seniorRewardList) do if v ~= k then SeniorRewardIndex = k break end end if SeniorRewardIndex == 0 then SeniorRewardIndex = #seniorRewardList + 1 end return CommonRewardIndex < SeniorRewardIndex and CommonRewardIndex or SeniorRewardIndex end return CommonRewardIndex end ---@public 指定等级奖励是否可领取 function SuperGoldHonorOrder_Model.IsCanReceiveByRewardType_Level(activityId, type, level) local curLevel = private.SuperGoldHonorOrderDict[activityId].HonorLv if level <= curLevel then local getList if type == MDL.HonorOrder.RewardType.Ordinary then getList = private.SuperGoldHonorOrderDict[activityId].CommonRewards elseif type == MDL.HonorOrder.RewardType.Advanced then getList = private.SuperGoldHonorOrderDict[activityId].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 SuperGoldHonorOrder_Model.IsAlreadyReceivedByRewardType_Level(activityId, rewardType, level) local rewardList = {} if rewardType == MDL.HonorOrder.RewardType.Ordinary then -- 普通奖励 rewardList = private.SuperGoldHonorOrderDict[activityId].CommonRewards elseif rewardType == MDL.HonorOrder.RewardType.Advanced then -- 典藏奖励 rewardList = private.SuperGoldHonorOrderDict[activityId].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 SuperGoldHonorOrder_Model.CheckCanReceive(activityId) if private.SuperGoldHonorOrderDict and private.SuperGoldHonorOrderDict[activityId] then local curLevel = private.SuperGoldHonorOrderDict[activityId].HonorLv local maxLevel = DataSheetManager.SuperGoldHonorOrderReward[private.SuperGoldHonorOrderDict[activityId].HonorOrderId]:GetDataCount() if curLevel > maxLevel then return false else -- 是否有奖励可领取 for i = 1, curLevel do if SuperGoldHonorOrder_Model.IsCanReceiveByRewardType_Level(activityId, MDL.HonorOrder.RewardType.Ordinary, i) or (private.SuperGoldHonorOrderDict[activityId].IsSenior and SuperGoldHonorOrder_Model.IsCanReceiveByRewardType_Level(activityId, MDL.HonorOrder.RewardType.Advanced, i)) then return true end end end end return false end ---@public 红点状态 function SuperGoldHonorOrder_Model.CheckRedPoint(activityId) return SuperGoldHonorOrder_Model.CheckCanReceive(activityId) or CTL.OACommon.IsHasTaskRedPoint(activityId) end --endregion ********************* 外部获取数据接口 ********************* --region **************** 协议 ******************* --[[ ActivityId -- 活动ID HonorOrderId -- 战令ID HonorExp -- 战令经验 IsSenior -- 是否激活高级战令 CommonRewards -- 普通战令已领取列表 SeniorRewards -- 高级战令已领取列表 ]] function SuperGoldHonorOrder_Model.SyncHonorOrderInfo(msgResp) private.SuperGoldHonorOrderDict = {} for k,v in ipairs(msgResp) do if MDL.OperationActivity.GetOperationActivityInfo(private.ActivityType, v.ActivityId) then --logging.log(LTAG.LOG,"活动战令动态信息 ", v) local activityId = v.ActivityId private.SuperGoldHonorOrderDict[activityId] = v private.SuperGoldHonorOrderDict[activityId].HonorLv = private.GetHonorOrderCurLevelByExp(v.HonorOrderId, v.HonorExp) if private.initRedPointList[activityId] then local rpKeys = CTL.SuperGoldMain.RpEventId[activityId] local isHasAchievementReward = SuperGoldHonorOrder_Model.CheckRedPoint(activityId) and MDL.SuperGoldMain.IsActivityInFuncTime(activityId) MDL.RedPoint.UpdateNodeStateByLogicParams(isHasAchievementReward, rpKeys.TownHome, rpKeys.HonorOrder) else CTL.SuperGoldMain.InitHonorOrderRedPointTreeByActivityId(activityId) private.initRedPointList[activityId] = true end if v.IsSenior then EventSystem.Dispatch(EventID.UI_SuperGoldHonorOrder_IsSenior) end end end EventSystem.Dispatch(EventID.UI_SuperGoldHonorOrder_RefreshReward) end ---@public 领取战令奖励 function SuperGoldHonorOrder_Model.ClaimSubOrderRewardRequest(activityId, rewardType, rewardId) local msg = sub_honor_order_opt_pb.ClaimSubOrderRewardReq() msg.ActivityID = activityId msg.RewardType = rewardType msg.Target = rewardId NetManager.SendMessage(MessageEnums.MessageClaimSubOrderReward, msg) end function private.ClaimSubOrderRewardResponse(msgResp) logging.log(LTAG.LOG, "ClaimSubOrderRewardResponse") EventSystem.Dispatch(EventID.UI_SuperGoldHonorOrder_RefreshReward) end ---@public 一键领取战令奖励 function SuperGoldHonorOrder_Model.ClaimAllSubOrderRewardRequest(activityId) local msg = sub_honor_order_opt_pb.ClaimAllSubOrderRewardReq() msg.ActivityID = activityId NetManager.SendMessage(MessageEnums.MessageClaimAllSubOrderReward, msg) end function private.ClaimAllSubOrderRewardResponse(msgResp) logging.log(LTAG.LOG, "ClaimAllSubOrderRewardResponse") EventSystem.Dispatch(EventID.UI_SuperGoldHonorOrder_RefreshReward) end --endregion ********************* 协议 ************************ return SuperGoldHonorOrder_Model