local SignIn_Model = {} local private = {} local operation_activity_pb = require "Proto.operation_activity_pb" local EventSystem = require('Event/EventSystem') local FirstSignInRewardClaim = "FirstSignInRewardClaim" function SignIn_Model.OnStartup() NetManager.RegisterMsgCB(MessageEnums.MessageAcquireStateSignReward, private.AcquireStateSignRewardResp) private.ActivityType = MDL.OperationActivity.ActivityType.StageSignIn private.stageSignInInfo = {} private.delayViewActivityId = {} end function private.AddDelayViewActivityId(activityId) private.delayViewActivityId[activityId] = true end function private.CheckDelayViewActivityId(activityId) return private.delayViewActivityId[activityId] end function SignIn_Model.RemoveDelayViewActivityId(activityId) private.delayViewActivityId[activityId] = nil end function SignIn_Model.GetFirstRewardOpenTime() return PersistentData.PlayerData:Get(FirstSignInRewardClaim, 0) end function SignIn_Model.SetStageSignInInfo(info) for i, v in ipairs(info) do local activityId = v.activityId private.stageSignInInfo[activityId] = v -- TODO 这里临时处理一下 判断是否有PersistentData.PlayerData -- PersistentData.PlayerData 会在enterworld时初始化,但是这里playerchange会在enterworld之前触发。所以先临时处理一下 之后版本优化具体时序,此处需要移除 if PersistentData.PlayerData then if v.curStageID == 1 then --开放第一个奖励的时候记录一下 PersistentData.PlayerData:Set(FirstSignInRewardClaim, UTL.Time.GetServerTimestamp(), true) else if v.curStageID > 2 then PersistentData.PlayerData:Remove(FirstSignInRewardClaim, true) end end else logging.warn(LTAG.WARN, "EnterWorld未执行,PersistentData.PlayerData模块未初始化--SignIn_Model.SetStageSignInInfo") end ---如果有还未领取的奖励,则添加到自动弹出列表 local viewName = Const_UI_Lua.UIEnum.OperationActivity.UISignInGift -- 登录打脸图处理过 才走以下逻辑 if CTL.SignIn.IsHasRewardNotCollect(activityId) and not UIManager.IsViewOpened(viewName) then if not private.CheckDelayViewActivityId(activityId) then if CTL.PushInterface.TriggerUnlockPushInterface(viewName, true) then private.AddDelayViewActivityId(activityId) end end end end end function SignIn_Model.GetSignInDataByActivityId(activityId) return private.stageSignInInfo[activityId] end --是否弹打脸图的特殊需求 function SignIn_Model.IsNeedPushInterFace(activityId) return private.stageSignInInfo[activityId] and private.stageSignInInfo[activityId].needPushInterFace or false end --是否领取了十四日所有奖励 function SignIn_Model.IsCollectedAllReward() local typeInfoList = MDL.OperationActivity.GetOperationActivityInfo(private.ActivityType) local index, table = next(typeInfoList) if table and not CTL.SignIn.IsSignInStillGoing(table.activityId) then return true end return false end function SignIn_Model.AcquireStateSignRewardReq(activityId, stageId) local msg = operation_activity_pb.AcquireStateSignRewardReq() msg.activityId = activityId msg.stageId = stageId NetManager.SendMessage(MessageEnums.MessageAcquireStateSignReward, msg) end function private.AcquireStateSignRewardResp(msgResp) if msgResp.Resp.Code == 0 then EventSystem.Dispatch(EventID.UI_StageSignIn_AcquireReward) EventSystem.Dispatch(EventID.UI_WelfareBase_RefreshRedPoint) --如果都领取完了,需要刷新 if MDL.SignIn.IsCollectedAllReward() then EventSystem.Dispatch(EventID.UI_WelfareBase_RefreshEventList) end end end return SignIn_Model