local DrawStraws_Model = {} local private = {} local EventSystem = require('Event/EventSystem') local draw_straws_info_pb = require 'Proto.draw_straws_info_pb' local draw_straws_pb = require 'Proto.draw_straws_pb' function DrawStraws_Model.OnStartup() NetManager.RegisterMsgCB(MessageEnums.MessageDrawStrawsPanel, private.ResponseMainPanel) NetManager.RegisterMsgCB(MessageEnums.MessageDrawStraws, private.ResponseDraw) NetManager.RegisterMsgCB(MessageEnums.MessageDrawStrawsGetNumReward, private.ResponseDrawNumRewards) NetManager.RegisterMsgCB(MessageEnums.MessageDrawStrawsGetItem, private.ResponseDrawTaskRewards) NetManager.RegisterMsgCB(MessageEnums.MessageDrawStrawsRestDrawNum, private.ResponseReset) private.drawNumCount = 0 private.drawNumRewardStateDict = {} private.taskProgressDict = {} end function DrawStraws_Model.OnShutdown() private.drawNumRewardStateDict = nil private.taskProgressDict = nil end ---------------------------------- 协议相关 -------------------------------------- function DrawStraws_Model.RefreshDrawStrawsInfos(infos) if IsServerDataNotNil(infos) then if IsServerDataNotNil(infos.numRewardInfos) then for _, v in ipairs(infos.numRewardInfos) do private.drawNumRewardStateDict[v.numReward] = v.state end EventSystem.Dispatch(EventID.UI_DrawStraws_RefreshMain) end if IsServerDataNotNil(infos.triggerInfos) then for _, v in ipairs (infos.triggerInfos) do if not private.taskProgressDict[v.triggerId] then private.taskProgressDict[v.triggerId] = {progress = v.reachNum, state = v.state} else private.taskProgressDict[v.triggerId].progress = v.reachNum private.taskProgressDict[v.triggerId].state = v.state end EventSystem.Dispatch(EventID.UI_DrawStraws_RefreshTask) end end EventSystem.Dispatch(EventID.UI_DrawStraws_RefreshRp) EventSystem.Dispatch(EventID.UI_WelfareBase_RefreshRedPoint) end end function DrawStraws_Model.RequestMainPanel() local msg = draw_straws_info_pb.DrawStrawsPanelReq() NetManager.SendMessage(MessageEnums.MessageDrawStrawsPanel, msg) end function private.ResponseMainPanel(msgResp) private.drawNumCount = msgResp.drawNumCount DrawStraws_Model.RefreshDrawStrawsInfos(msgResp) EventSystem.Dispatch(EventID.UI_DrawStraws_RefreshMain) end function DrawStraws_Model.RequestDraw(drawNum) local msg = draw_straws_info_pb.DrawStrawsReq() msg.drawNum = drawNum NetManager.SendMessage(MessageEnums.MessageDrawStraws, msg) end function private.ResponseDraw(msgResp) private.drawNumCount = msgResp.drawNumCount for num, state in pairs(private.drawNumRewardStateDict) do if num <= private.drawNumCount and state == draw_straws_pb.State_NoReach then private.drawNumRewardStateDict[num] = draw_straws_pb.State_ReachNoGet end end EventSystem.Dispatch(EventID.UI_DrawStraws_RefreshMain, msgResp.rewardItems) EventSystem.Dispatch(EventID.UI_DrawStraws_RefreshRp) EventSystem.Dispatch(EventID.UI_WelfareBase_RefreshRedPoint) end function DrawStraws_Model.RequestDrawNumRewards(drawNum) local msg = draw_straws_info_pb.DrawStrawsGetNumRewardReq() msg.drawNum = drawNum NetManager.SendMessage(MessageEnums.MessageDrawStrawsGetNumReward, msg) end function private.ResponseDrawNumRewards(msgResp) if msgResp.success then if private.drawNumRewardStateDict[msgResp.drawNum] then private.drawNumRewardStateDict[msgResp.drawNum] = draw_straws_pb.State_Get EventSystem.Dispatch(EventID.UI_DrawStraws_RefreshMain) EventSystem.Dispatch(EventID.UI_DrawStraws_RefreshRp) EventSystem.Dispatch(EventID.UI_WelfareBase_RefreshRedPoint) end end end function DrawStraws_Model.RequestDrawTaskRewards(triggerId) local msg = draw_straws_info_pb.DrawStrawsGetItemReq() msg.triggerId = triggerId NetManager.SendMessage(MessageEnums.MessageDrawStrawsGetItem, msg) end function private.ResponseDrawTaskRewards(msgResp) if msgResp.success then if private.taskProgressDict[msgResp.triggerId] then private.taskProgressDict[msgResp.triggerId].state = draw_straws_pb.State_Get EventSystem.Dispatch(EventID.UI_DrawStraws_RefreshTask, msgResp.rewardItems) EventSystem.Dispatch(EventID.UI_DrawStraws_RefreshRp) EventSystem.Dispatch(EventID.UI_WelfareBase_RefreshRedPoint) end end end function DrawStraws_Model.RequestReset() local msg = draw_straws_info_pb.DrawStrawsRestDrawNumReq() NetManager.SendMessage(MessageEnums.MessageDrawStrawsRestDrawNum, msg) end function private.ResponseReset(msgResp) if msgResp.success then CTL.Tips.AddTipsMsg(Const_IDS["IDS_DrawStraws_ResetFinish"]) DrawStraws_Model.RequestMainPanel() end end --------------------------------------------------------------------------------- function DrawStraws_Model.GetTriggerProgress(triggerID) if triggerID and private.taskProgressDict[triggerID] then return private.taskProgressDict[triggerID].progress end return 0 end function DrawStraws_Model.GetTriggerRewardState(triggerID) if triggerID and private.taskProgressDict[triggerID] then return private.taskProgressDict[triggerID].state end return draw_straws_pb.State_NoReach end function DrawStraws_Model.GetDrawCountRewardState(num) return private.drawNumRewardStateDict[num] or draw_straws_pb.State_NoReach end function DrawStraws_Model.GetDrawNumCount() return private.drawNumCount end function DrawStraws_Model.IsHasDrawNumReward() for _, state in pairs (private.drawNumRewardStateDict) do if state == draw_straws_pb.State_ReachNoGet then return true end end return false end function DrawStraws_Model.IsHasTaskReward() for _, v in pairs (private.taskProgressDict) do if v.state == draw_straws_pb.State_ReachNoGet then return true end end return false end function DrawStraws_Model.IsShowDrawStrawsRp() if MDL.Unlock.IsUnlock(MDL.Unlock.FunctionType.DrawStraws) then return DrawStraws_Model.IsHasDrawNumReward() or DrawStraws_Model.IsHasTaskReward() end return false end return DrawStraws_Model