local FestivalLogin_Model = {} local private = {} local EventSystem = require('Event/EventSystem') local activity_festival_login_opt_pb = require "Proto.activity_festival_login_opt_pb" function FestivalLogin_Model.OnStartup() NetManager.RegisterMsgCB(MessageEnums.MessageActivityFestivalLoginReward, nil) private.ActivityType = MDL.OperationActivity.ActivityType.FestivalLogin --[[ activityId 活动ID loginDayNum 登录天数 hasRewardDays 已领奖列表 ]] private.FestivalLoginDic = {} -- key:activityId private.FestivalLoginList = {} private.FestivalLoginWelfareTypeList = {} -- key:welfareType value: activityId end function FestivalLogin_Model.GetFestivalLoginInfoList() return private.FestivalLoginList end -- 节日签到是否开启 function FestivalLogin_Model.GetFestivalLoginIsOpen(welfareType) if CTL.OperationActivity.IsOperationActivityTypeOpen(private.ActivityType) and CTL.OperationActivity.IsOperationActivityTypeUnlock(private.ActivityType) and MDL.Unlock.IsUnlock(MDL.Unlock.FunctionType.FestivalLogin) then local activityId = private.FestivalLoginWelfareTypeList[welfareType] local festivalLoginInfo = private.FestivalLoginDic[activityId] if festivalLoginInfo then local info = MDL.OperationActivity.GetOperationActivityInfo(private.ActivityType, activityId) if CTL.OperationActivity.IsOperationActivityOpen(info) then return true end end end return false end function FestivalLogin_Model.GetFestivalLoginActivityIdByWelfareType(welfareType) return private.FestivalLoginWelfareTypeList[welfareType] end -- 是否有可领奖励/红点 function FestivalLogin_Model.HaveFestivalLogin1CanReceiveReward() local activityId = private.FestivalLoginWelfareTypeList[CTL.Welfare.WelfareType.FestivalLogin_1] return private.HaveFestivalLoginCanReceiveReward(activityId) end -- 是否有可领奖励/红点 function FestivalLogin_Model.HaveFestivalLogin2CanReceiveReward() local activityId = private.FestivalLoginWelfareTypeList[CTL.Welfare.WelfareType.FestivalLogin_2] return private.HaveFestivalLoginCanReceiveReward(activityId) end function private.HaveFestivalLoginCanReceiveReward(activityId) local festivalLoginInfo = private.FestivalLoginDic[activityId] if festivalLoginInfo then local loginDayNum = festivalLoginInfo.loginDayNum local rewardList = MDL.OperationActivity.FestivalLoginReward:GetDataByActivityID_Day(activityId) for i, rewardInfo in ipairs(rewardList) do if rewardInfo.Day <= loginDayNum then local isRedPoint = true for k,hasRewardInfo in ipairs(festivalLoginInfo.hasRewardDays) do if hasRewardInfo == rewardInfo.Day then isRedPoint = false break end end if isRedPoint then return true end end end end return false end -- 奖励全部领完 function FestivalLogin_Model.IsCollectedAllReward(welfareType) local activityId = private.FestivalLoginWelfareTypeList[welfareType] local festivalLoginInfo = private.FestivalLoginDic[activityId] if festivalLoginInfo then local commitCount = #festivalLoginInfo.hasRewardDays local maxRewardCount = MDL.OperationActivity.FestivalLoginReward:GetDataLengthByActivityID(activityId) return commitCount >= maxRewardCount else return false end end -- 签到进度定位 function FestivalLogin_Model.GetFestivalLoginRewardMoveIndex(welfareType) local activityId = private.FestivalLoginWelfareTypeList[welfareType] local festivalLoginInfo = private.FestivalLoginDic[activityId] for i = 1, festivalLoginInfo.loginDayNum do local isShowIndex = true local rewardData = MDL.OperationActivity.FestivalLoginReward:GetDataByActivityID_Day(activityId, i) if not rewardData then break end for k,v in ipairs(festivalLoginInfo.hasRewardDays) do if v == rewardData.Day then isShowIndex = false break end end if isShowIndex then return i - 1 end end return festivalLoginInfo.loginDayNum - 1 end ---@public 领取状态 function FestivalLogin_Model.GetFestivalLoginDayState(activityId, dayNum) local festivalLoginInfo = private.FestivalLoginDic[activityId] if festivalLoginInfo then local loginDayNum = festivalLoginInfo.loginDayNum for k,v in ipairs(festivalLoginInfo.hasRewardDays) do if v == dayNum then return MDL.OACommon.ActivityTaskState.Commit end end if dayNum <= loginDayNum then return MDL.OACommon.ActivityTaskState.Done end end return MDL.OACommon.ActivityTaskState.UnDone end ---@public 同步节日签到服务器数据 function FestivalLogin_Model.SyncFestivalLoginInfos(msgResp) for k,v in ipairs(msgResp) do --logging.error(LTAG.ERROR,"SyncFestivalLoginInfos ", v) local festivalLoginInfo = v if not private.FestivalLoginDic[festivalLoginInfo.activityId] then private.FestivalLoginDic[festivalLoginInfo.activityId] = {} end private.FestivalLoginDic[festivalLoginInfo.activityId] = festivalLoginInfo table.insert(private.FestivalLoginList, festivalLoginInfo) local backgroundCfg = MDL.OperationActivity.ActivityBaseData[private.ActivityType]:GetDataByActivityID(festivalLoginInfo.activityId) private.FestivalLoginWelfareTypeList[backgroundCfg.PrefabMode] = festivalLoginInfo.activityId end EventSystem.Dispatch(EventID.UI_FestivalLogin_RefreshView) EventSystem.Dispatch(EventID.UI_WelfareBase_RefreshRedPoint) end ---@public 节日签到领奖req function FestivalLogin_Model.ActivityFestivalLoginRewardReq(activityId, dayNum) local msg = activity_festival_login_opt_pb.ActivityFestivalLoginRewardReq() msg.activityID = activityId msg.dayNum = dayNum NetManager.SendMessage(MessageEnums.MessageActivityFestivalLoginReward, msg) end return FestivalLogin_Model