local LuckyLottery_Model = {} local private = {} local EventSystem = require("Event/EventSystem") local activity_lucky_lottery_opt_pb = require('Proto.activity_lucky_lottery_opt_pb') LuckyLottery_Model.PoolRefresh = { None = 0, SelectReward = 1, Draw = 2, } function LuckyLottery_Model.OnStartup() NetManager.RegisterMsgCB(MessageEnums.MessageActivityLuckyLotteryOpen, private.ActivityLuckyLotteryOpenResp) NetManager.RegisterMsgCB(MessageEnums.MessageActivityLuckyLotterySetPool, private.ActivityLuckyLotterySetPoolResp) NetManager.RegisterMsgCB(MessageEnums.MessageActivityLuckyLotteryOpt, private.ActivityLuckyLotteryOptResp) NetManager.RegisterMsgCB(MessageEnums.MessageActivityLuckyLotteryReward, private.ActivityLuckyLotteryRewardResp) NetManager.RegisterMsgCB(MessageEnums.MessageActivityLuckyLotteryBoxOpen, private.ActivityLuckyLotteryBoxOpenResp) NetManager.RegisterMsgCB(MessageEnums.MessageActivityLuckyLotteryGivePresent, private.ActivityLuckyLotteryGivePresentResp) NetManager.RegisterMsgCB(MessageEnums.MessageActivityLuckyLotteryGetPresent, private.ActivityLuckyLotteryGetPresentResp) private.ActivityType = MDL.OperationActivity.ActivityType.LuckyLottery private.optionRewardByRound = {} private.lotteryNum = {} private.lotteryPoolList = {} --扭蛋池奖励Id的数组(初始化一次即可,后续不会改变) private.lotteryPoolDict = {} --扭蛋池奖励Id是否领取的字典 private.lotteryNumReward = {} end function LuckyLottery_Model.GetPoolIdList(activityId) return private.lotteryPoolList[activityId] or {} end function LuckyLottery_Model.GetLotteryNum(activityId) return private.lotteryNum[activityId] end function LuckyLottery_Model.GetLotteryPoolDict(activityId) return private.lotteryPoolDict[activityId] end function LuckyLottery_Model.GetLotteryNumReward(activityId) return private.lotteryNumReward[activityId] end function LuckyLottery_Model.GetTotalPoolRewardNum(activityId) return #private.lotteryPoolList[activityId] end function private.SetLotteryInfo(lotteryInfo, refreshType) local activityId = lotteryInfo.activityId private.lotteryNum[activityId] = lotteryInfo.lotteryNum if not private.lotteryNumReward[activityId] then private.lotteryNumReward[activityId] = {} end for i, v in ipairs(lotteryInfo.lotteryNumReward) do private.lotteryNumReward[activityId][v] = true end if not private.lotteryPoolList[activityId] or #private.lotteryPoolList[activityId] == 0 then private.lotteryPoolList[activityId] = {} private.lotteryPoolDict[activityId] = {} for i, v in ipairs(lotteryInfo.pool) do table.insert(private.lotteryPoolList[activityId], v.capsuleId) private.lotteryPoolDict[activityId][v.capsuleId] = v.isLottery end else for i, v in ipairs(lotteryInfo.pool) do private.lotteryPoolList[activityId][i] = v.capsuleId private.lotteryPoolDict[activityId][v.capsuleId] = v.isLottery end end EventSystem.Dispatch(EventID.UI_LuckyLottery_InfoUpdate, refreshType) end function LuckyLottery_Model.GetOptionRewardByRound(activityId, roundId) if not private.optionRewardByRound[activityId] then private.PreProcessSheetData() end return private.optionRewardByRound[activityId][roundId] end function private.PreProcessSheetData() private.optionRewardByRound = {} local info = MDL.OperationActivity.GetOperationActivityInfo(private.ActivityType) if info then for activityId, value in pairs(info) do private.optionRewardByRound[activityId] = {} for i, v in ipairs(MDL.OperationActivity.LuckyLotteryOptionalReward:GetDataByActivityID_ID(activityId)) do local roundId = v.RoundID if not private.optionRewardByRound[activityId][roundId] then private.optionRewardByRound[activityId][roundId] = {} end table.insert(private.optionRewardByRound[activityId][roundId], v) end end end end --region 协议 --打开扭蛋界面 function LuckyLottery_Model.ActivityLuckyLotteryOpenReq(activityId) local msg = activity_lucky_lottery_opt_pb.ActivityLuckyLotteryOpenReq() msg.activityId = activityId NetManager.SendMessage(MessageEnums.MessageActivityLuckyLotteryOpen, msg) end function private.ActivityLuckyLotteryOpenResp(msgResp) if msgResp.Resp.Code == 0 then private.SetLotteryInfo(msgResp.info) if UIManager.IsViewOpened(Const_UI_Lua.UIEnum.UILuckyLotteryMain) then EventSystem.Dispatch(EventID.UI_LuckyLottery_InfoUpdate) else UIManager.OpenView(Const_UI_Lua.UIEnum.UILuckyLotteryMain, {activityId = msgResp.info.activityId}) end end end --选定扭蛋奖池 function LuckyLottery_Model.ActivityLuckyLotterySetPoolReq(activityId, idList) local msg = activity_lucky_lottery_opt_pb.ActivityLuckyLotterySetPoolReq() msg.activityId = activityId for i, v in ipairs(idList) do table.insert(msg.capsuleId, v) end NetManager.SendMessage(MessageEnums.MessageActivityLuckyLotterySetPool, msg) end function private.ActivityLuckyLotterySetPoolResp(msgResp) if msgResp.Resp.Code == 0 then private.SetLotteryInfo(msgResp.info, LuckyLottery_Model.PoolRefresh.SelectReward) UIManager.CloseView(Const_UI_Lua.UIEnum.UILuckyLotterySelectReward) UIManager.CloseView(Const_UI_Lua.UIEnum.UILuckyLotteryConfirmReward) end end --抽取扭蛋 function LuckyLottery_Model.ActivityLuckyLotteryOptReq(activityId) local msg = activity_lucky_lottery_opt_pb.ActivityLuckyLotteryOptReq() msg.activityId = activityId NetManager.SendMessage(MessageEnums.MessageActivityLuckyLotteryOpt, msg) end function private.ActivityLuckyLotteryOptResp(msgResp) if msgResp.Resp.Code == 0 then private.SetLotteryInfo(msgResp.info) end end --领取累积抽取奖励 function LuckyLottery_Model.ActivityLuckyLotteryRewardReq(activityId, rewardId) local msg = activity_lucky_lottery_opt_pb.ActivityLuckyLotteryRewardReq() msg.activityId = activityId msg.rewardId = rewardId NetManager.SendMessage(MessageEnums.MessageActivityLuckyLotteryReward, msg) end function private.ActivityLuckyLotteryRewardResp(msgResp) if msgResp.Resp.Code == 0 then private.SetLotteryInfo(msgResp.info) end end --打开幸运匣界面 function LuckyLottery_Model.ActivityLuckyLotteryBoxOpenReq(activityId) local msg = activity_lucky_lottery_opt_pb.ActivityLuckyLotteryBoxOpenReq() msg.activityId = activityId NetManager.SendMessage(MessageEnums.MessageActivityLuckyLotteryBoxOpen, msg) end function private.ActivityLuckyLotteryBoxOpenResp(msgResp) if msgResp.Resp.Code == 0 then EventSystem.Dispatch(EventID.UI_LuckyLottery_FriendUpdate, msgResp.activityId, msgResp.playerShowInfo) end end --送礼 function LuckyLottery_Model.ActivityLuckyLotteryGivePresentReq(activityId, acid) local msg = activity_lucky_lottery_opt_pb.ActivityLuckyLotteryGivePresentReq() msg.activityId = activityId msg.acid = acid NetManager.SendMessage(MessageEnums.MessageActivityLuckyLotteryGivePresent, msg) end function private.ActivityLuckyLotteryGivePresentResp(msgResp) if msgResp.Resp.Code == 0 then CTL.Tips.AddTipsMsg(Const_IDS.IDS_LuckyLottery_LuckyBoxHint_5) end end --领取别人送的礼 function LuckyLottery_Model.ActivityLuckyLotteryGetPresentReq(activityId, index) local msg = activity_lucky_lottery_opt_pb.ActivityLuckyLotteryGetPresentReq() msg.activityId = activityId msg.index = index NetManager.SendMessage(MessageEnums.MessageActivityLuckyLotteryGetPresent, msg) end function private.ActivityLuckyLotteryGetPresentResp(msgResp) if msgResp.Resp.Code == 0 then CTL.Tips.AddTipsMsg(Const_IDS.IDS_LuckyLottery_LuckyBoxHint_6) EventSystem.Dispatch(EventID.UI_LuckyLottery_FriendUpdate, msgResp.activityId, msgResp.playerShowInfo) end end --endregion return LuckyLottery_Model