local AnniversaryLuckyDraw_Model = {} local private = {} local EventSystem = require('Event/EventSystem') local ANNIVERSARY_LUCKY_DRAW_PUSH_INTERFACE = "ANNIVERSARY_LUCKY_DRAW_PUSH_INTERFACE" local activity_new_year_opt_pb = require('Proto/activity_new_year_opt_pb') AnniversaryLuckyDraw_Model.RecordType = { RecordTypeSelf = activity_new_year_opt_pb.RecordTypeSelf, -- 自己的记录 RecordTypeAll = activity_new_year_opt_pb.RecordTypeAll, -- 所有人的记录 RecordTypeLuckyFish = activity_new_year_opt_pb.RecordTypeLuckyFish, -- 锦鲤记录 } function AnniversaryLuckyDraw_Model.OnStartup() NetManager.RegisterMsgCB(MessageEnums.MessageActivityNewYearLuckyDraw, private.NewYearLuckyDraw) NetManager.RegisterMsgCB(MessageEnums.MessageActivityNewYearLuckyDrawRecord, private.NewYearLuckyDrawRecord) NetManager.RegisterMsgCB(MessageEnums.MessageG2CLuckyDrawRecord, private.G2CLuckyDrawRecord) NetManager.RegisterMsgCB(MessageEnums.MessageActivityNewYearLuckyDrawReceive, private.NewYearLuckyDrawReceive) EventSystem.Regist(EventID.AcquireSystemRedAfterUnlock, private.OnLoginPostprocess) private.drawRemainCount = {} private.triggers = {} private.activityIds = {} end function private.OnLoginPostprocess() for i, v in ipairs(private.activityIds) do AnniversaryLuckyDraw_Model.SetRedPointStatus(v) end end --设置锦鲤大奖中将打脸图 function AnniversaryLuckyDraw_Model.SetLuckyDrawPushInterface() PersistentData.PlayerData:Set(ANNIVERSARY_LUCKY_DRAW_PUSH_INTERFACE, UTL.Time.GetServerTimestamp(), true) end --是否展示锦鲤大奖中将打脸图 function AnniversaryLuckyDraw_Model.IsShowLuckyDrawPushInterface() if not AnniversaryLuckyDraw_Model.IsOpenedLuckyFishReward() then return false end local lastTimeStamp = PersistentData.PlayerData:Get(ANNIVERSARY_LUCKY_DRAW_PUSH_INTERFACE) or 0 if lastTimeStamp == 0 or UTL.Time.IsTimestampCrossDay(lastTimeStamp) then AnniversaryLuckyDraw_Model.SetLuckyDrawPushInterface() return true end return false end --今天是否已开锦鲤大奖 function AnniversaryLuckyDraw_Model.IsOpenedLuckyFishReward() local lastestRewardPlayerInfo = AnniversaryLuckyDraw_Model.GetTodayLuckyFishRewardPlayerInfo() if not lastestRewardPlayerInfo then return false end return not UTL.Time.IsTimestampCrossDay(lastestRewardPlayerInfo.drawTime) end --是否正在开锦鲤大奖中 function AnniversaryLuckyDraw_Model.IsOpeningReward() if AnniversaryLuckyDraw_Model.IsOpenedLuckyFishReward() then return false end return AnniversaryLuckyDraw_Model.GetLuckyFishLeftTime() <= 0 end function AnniversaryLuckyDraw_Model.GetLuckyFishLeftTime() local luckyDrawData = DataSheetManager.LuckyDraw:GetDataByModeTypeID(1) return UTL.Time.GetConfigTimestampById(luckyDrawData.LuckyDrawTime) - UTL.Time.GetServerTimestamp() end function AnniversaryLuckyDraw_Model.GetLeftDrawTimes(activityId) return private.drawRemainCount[activityId] or 0 end function AnniversaryLuckyDraw_Model.GetTodayLuckyFishRewardPlayerInfo() return private.allLuckyFishDrawRecord and private.allLuckyFishDrawRecord[1] or nil end function AnniversaryLuckyDraw_Model.GetMyLuckyFishRewardInfo() for _, v in ipairs(AnniversaryLuckyDraw_Model.GetAllLuckyFishLuckyPlayersInfo()) do if v.acid == BattleDataGetter.GetAcID() then return v end end return nil end function AnniversaryLuckyDraw_Model.GetAllLuckyFishLuckyPlayersInfo() return private.allLuckyFishDrawRecord or {} end function AnniversaryLuckyDraw_Model.GetLatestLuckyPlayerInfo() return private.allDrawRecord and private.allDrawRecord[1] or nil end function AnniversaryLuckyDraw_Model.GetAllLuckyDrawRecords() return private.allDrawRecord or {} end function AnniversaryLuckyDraw_Model.GetSelfLuckyDrawRecord() return private.selfDrawRecord or {} end function AnniversaryLuckyDraw_Model.GetTrigger(activityId, id) if private.triggers[activityId] then return private.triggers[activityId][id] or 0 else return 0 end end --region ***************** 协议 ******************** function AnniversaryLuckyDraw_Model.SetInfo(info) table.clear(private.activityIds) for i, v in ipairs(info) do private.SetDrawRemainCount(v.activityId, v.drawRemainCount) if IsServerDataNotNil(v.triggers) and #v.triggers > 0 then private.SetTriggers(v.activityId, v.triggers) table.insert(private.activityIds, v.activityId) else private.triggers[v.activityId] = {} end AnniversaryLuckyDraw_Model.SetRedPointStatus(v.activityId) end end function private.SetDrawRemainCount(activityId, drawRemainCount) private.drawRemainCount[activityId] = drawRemainCount EventSystem.Dispatch(EventID.UI_AnniversaryLuckyDraw_RemainCount_Refresh, activityId) end function private.SetTriggers(activityId, triggers) if not private.triggers[activityId] then private.triggers[activityId] = {} end for i, v in ipairs(triggers) do private.triggers[activityId][v.id] = v.count end EventSystem.Dispatch(EventID.UI_AnniversaryLuckyDraw_TriggerRefresh) end function AnniversaryLuckyDraw_Model.SetRedPointStatus(activityId, status) local info = MDL.OperationActivity.GetOperationActivityInfo(MDL.OperationActivity.ActivityType.NewYear, activityId) if not CTL.OperationActivity.IsOperationActivityOpen(info) then return end if not MDL.Unlock.IsUnlock(MDL.Unlock.FunctionType.AnniversaryLuckyDraw) then CTL.RedPoint.RemoveRedPoint(CTL.RedPoint.RedPointKey.NewYear_AnniversaryLuckyDraw) return end if AnniversaryLuckyDraw_Model.GetLeftDrawTimes(activityId) > 0 then CTL.RedPoint.AddRedPoint(CTL.RedPoint.RedPointKey.NewYear_AnniversaryLuckyDraw) return end if status ~= nil then if status then CTL.RedPoint.AddRedPoint(CTL.RedPoint.RedPointKey.NewYear_AnniversaryLuckyDraw) else CTL.RedPoint.RemoveRedPoint(CTL.RedPoint.RedPointKey.NewYear_AnniversaryLuckyDraw) end return end local time = MDL.RedPoint.GetRedPointTimeByType(MDL.RedPoint.RedPointType.AnniversaryLuckyDraw) if time and time > 0 and not UTL.Time.IsTimestampCrossDay(time) then CTL.RedPoint.RemoveRedPoint(CTL.RedPoint.RedPointKey.NewYear_AnniversaryLuckyDraw) else CTL.RedPoint.AddRedPoint(CTL.RedPoint.RedPointKey.NewYear_AnniversaryLuckyDraw) end end --锦鲤大奖开奖 function private.G2CLuckyDrawRecord(msgResp) logging.log(LTAG.LOG,"G2CLuckyDrawRecord", msgResp) EventSystem.Dispatch(EventID.UI_AnniversaryLuckyDraw_OpenLuckyFish, msgResp) end --抽奖,只返回随机结果而不发奖 function AnniversaryLuckyDraw_Model.NewYearLuckyDrawReq(activityId) local msg = activity_new_year_opt_pb.ActivityNewYearLuckyDrawReq() msg.activityId = activityId NetManager.SendMessage(MessageEnums.MessageActivityNewYearLuckyDraw, msg) end function private.NewYearLuckyDraw(msgResp) if msgResp.Resp.Code == 0 then EventSystem.Dispatch(EventID.UI_AnniversaryLuckyDraw_Start, msgResp.rewardId) --正常时间派发,相应开始抽奖动画 end end --抽奖领取上一次随机结果奖励 function AnniversaryLuckyDraw_Model.NewYearLuckyDrawReceive(activityId) local msg = activity_new_year_opt_pb.ActivityNewYearLuckyDrawReq() msg.activityId = activityId NetManager.SendMessage(MessageEnums.MessageActivityNewYearLuckyDrawReceive, msg) end function private.NewYearLuckyDrawReceive(msgResp) if msgResp.Resp.Code == 0 then if not string.isNilOrEmpty(msgResp.card) then UIManager.OpenView(Const_UI_Lua.UIEnum.UIAnniversaryLuckyDrawRewardGainPanel, msgResp) end end end function AnniversaryLuckyDraw_Model.NewYearLuckyDrawRecordReq(activityId, recordType) local msg = activity_new_year_opt_pb.ActivityNewYearLuckyDrawRecordReq() msg.activityId = activityId msg.recordType = recordType NetManager.SendMessage(MessageEnums.MessageActivityNewYearLuckyDrawRecord, msg) end function private.NewYearLuckyDrawRecord(msgResp) if msgResp.Resp.Code == 0 then table.reverseTable(msgResp.records) if msgResp.recordType == AnniversaryLuckyDraw_Model.RecordType.RecordTypeSelf then private.selfDrawRecord = msgResp.records EventSystem.Dispatch(EventID.UI_AnniversaryLuckyDraw_SelfRewardRecord) elseif msgResp.recordType == AnniversaryLuckyDraw_Model.RecordType.RecordTypeAll then private.allDrawRecord = msgResp.records EventSystem.Dispatch(EventID.UI_AnniversaryLuckyDraw_AllRewardRecord) else private.allLuckyFishDrawRecord = msgResp.records EventSystem.Dispatch(EventID.UI_AnniversaryLuckyFish_RewardRecord) end end end --endregion ***************** 协议 ******************** return AnniversaryLuckyDraw_Model