local DrawCard_Model = {} local private = {} local EventSystem = require('Event/EventSystem') local draw_card_info_pb = require('Proto/draw_card_info_pb') local CardHeroDatas = {} local CardItemDatas = {} local CurCardPoolID = 0 local UIGachainfoTab = 0 local isSkipAnim = false local isOriginDrawCardByOne = false DrawCard_Model.DrawCardItemThirdTypeEnum = { Normal = 0, GoldHero = 1, SuperGold = 2, } DrawCard_Model.RedHeroState = { None = 0, GetRedHero = 1, GetOverRedHero = 2, } function DrawCard_Model.OnStartup() NetManager.RegisterMsgCB(MessageEnums.MessageDrawCard, private.DrawCardResponse) NetManager.RegisterMsgCB(MessageEnums.MessageHundredDrawReward, private.HundredDrawRewardResponse) private.drawCardSumCount = 0 --抽卡保底机制,只给新玩家也就是没抽过卡的 private.isNewPlayer = false --0:未获得红武 1:获得红武 2:获得红+武 private.redHeroState = 0 private.drawCardSumCountPerDay = 0 private.redCardDrawCountList = {} private.cardPool = {} private.selectHeroDict = {} private.cardServerInfo = {} MDL.DrawCard.InitCardPool() private.hasGetHundredDrawReward = false end function DrawCard_Model.OnShutdown() table.clearArray(private.cardPool) private.cardPool = nil table.clearArray(private.selectHeroDict) private.selectHeroDict = nil table.clear(private.cardServerInfo) private.cardServerInfo = nil table.clear(private.redCardDrawCountList) private.redCardDrawCountList = nil end -- ---Region---------------每日抽卡次数限制----------------------------------- function private.SetRedCardDrawCount(cardPoolType, count) private.redCardDrawCountList[cardPoolType] = count EventSystem.Dispatch(EventID.UI_DrawCard_Refresh_RedCardDrawCount) end function DrawCard_Model.GetRedCardDrawCount(cardPoolType) return private.redCardDrawCountList[cardPoolType] end --每日抽卡总次数 function DrawCard_Model.GetDrawCardSumCountPerDay() return private.drawCardSumCountPerDay end function DrawCard_Model.SetDrawCardSumCountPerDay(value) private.drawCardSumCountPerDay = value end function DrawCard_Model.GetDrawCardTestSumCount() return private.drawCardSumCount end --是否是新玩家,抽卡包底机制只给新玩家 function DrawCard_Model.IsNewDrawCardPlayer() return private.isNewPlayer end --抽卡包底 红色武将状态 function DrawCard_Model.GetRedHeroState() return private.redHeroState end function DrawCard_Model.HasGetHundredDrawReward() return private.hasGetHundredDrawReward end function DrawCard_Model.CanDrawCardByOne() if private.drawCardSumCountPerDay > DrawCard_Model.DrawCardDailyMaxTimes() then return false, Const_IDS.IDS_DrawCard_Tip_DailyMaxTimes end if private.drawCardSumCountPerDay > 0 then return true end return false, Const_IDS.IDS_DrawCard_Tip_DailyMaxTimes end function DrawCard_Model.CanDrawCardByTen() if private.drawCardSumCountPerDay > DrawCard_Model.DrawCardDailyMaxTimes() then return false, Const_IDS.IDS_DrawCard_Tip_DailyMaxTimes end if private.drawCardSumCountPerDay >= 10 then return true end return false, Const_IDS.IDS_DrawCard_Tip_DailyMaxTimes end function DrawCard_Model.CanDrawCardByFifty() if private.drawCardSumCountPerDay > DrawCard_Model.DrawCardDailyMaxTimes() then return false, Const_IDS.IDS_DrawCard_Tip_DailyMaxTimes end if private.drawCardSumCountPerDay >= 50 then return true end return false, Const_IDS.IDS_DrawCard_Tip_DailyMaxTimes end function DrawCard_Model.DisplayLeftCountPerDay() local DailyMaxTimes = DrawCard_Model.DrawCardDailyMaxTimes() if private.drawCardSumCountPerDay <= 0 then return UTL.Color.FormatRedColor(private.drawCardSumCountPerDay).."/"..DailyMaxTimes end return private.drawCardSumCountPerDay.."/"..DailyMaxTimes end local DrawCardDailyMaxTimes = 0 function DrawCard_Model.DrawCardDailyMaxTimes() if DrawCardDailyMaxTimes <= 0 then DrawCardDailyMaxTimes = DataSheetManager.ConstData:GetDataByID("DrawCardDailyMaxTimes").IntValue end return DrawCardDailyMaxTimes end -- ---end----------------每日抽卡次数限制---------------------------------- function DrawCard_Model.SetCurCardPoolID(ID) CurCardPoolID = ID end function DrawCard_Model.GetCurCardPoolID() if CurCardPoolID == 0 then CurCardPoolID = private.cardPool[1].ID end return CurCardPoolID end ------------------------------- 抽卡界面选中标签页 -------------------------------------------- function DrawCard_Model.GetUIGachainfoTab() return UIGachainfoTab end function DrawCard_Model.SetUIGachainfoTab(tabIndex) UIGachainfoTab = tabIndex end ---------------------------------招募界面选择是否跳过初始动画------------------------------------------- function DrawCard_Model.GetIsSkipAnim() return isSkipAnim end function DrawCard_Model.SetIsSkipAnim(state) isSkipAnim = state end ----------------------------------招募界面初始抽卡选择是单抽还是十抽------------------------------------- function DrawCard_Model.GetIsOriginDrawCardByOne() return isOriginDrawCardByOne end function DrawCard_Model.SetIsOriginDrawCardByOne(state) isOriginDrawCardByOne = state end -- ------------------------------服务器通信---------------------------------------------------- function DrawCard_Model.RefreshCardInfoByServer(drawCardInfos) if drawCardInfos == nil then logging.error(LTAG.LOG, " -----------drawCardInfos == nil------------ ") return end private.drawCardSumCountPerDay = DrawCard_Model.DrawCardDailyMaxTimes() - drawCardInfos.usedNums private.drawCardSumCount = drawCardInfos.sumNums private.isNewPlayer = drawCardInfos.isNewPlayer private.redHeroState = drawCardInfos.redHeroState private.hasGetHundredDrawReward = drawCardInfos.hasGetHundredDrawReward local drawCardInfo = drawCardInfos.drawCardInfo local allCardPoolFreeCount = 0 for i = 1, #drawCardInfo do local cardInfo = drawCardInfo[i] if cardInfo ~= nil then if cardInfo.freeNums > 0 then allCardPoolFreeCount = allCardPoolFreeCount + 1 end private.cardServerInfo[cardInfo.cardPoolType] = cardInfo private.redCardDrawCountList[cardInfo.cardPoolType] = cardInfo.drawNum or 0 end end CTL.DrawCard.RefreshRedPoint() --界面打开时刷新界面数据 EventSystem.Dispatch(EventID.UI_DrawCard_Refresh_MainUI) end function DrawCard_Model.RequestDrawCard(ID, nums, isSkipAnimation, isDrawCardByOne) if isSkipAnimation ~= nil then DrawCard_Model.SetIsSkipAnim(isSkipAnimation) end if isDrawCardByOne ~= nil then DrawCard_Model.SetIsOriginDrawCardByOne(isDrawCardByOne) end CTL.DrawCard.UpdateHeroCardState() -- 拦截奖励提示 因为奖励在抽卡协议数据执行前执行 所以请求时就拦截 MDL.Reward.SetCloseRewardTipShow(true) local msg = draw_card_info_pb.DrawCardReq() msg.cardPoolType = ID msg.nums = nums NetManager.SendMessage(MessageEnums.MessageDrawCard,msg) end function private.DrawCardResponse(msgResp) if msgResp.Resp.Code == 0 then private.SetRedCardDrawCount(msgResp.cardPoolType, msgResp.drawNum) CTL.DrawCard.HandleDrawCardResult(msgResp.cardPoolType, msgResp.cardReward, msgResp.rewardItems) end MDL.Reward.SetCloseRewardTipShow(false) end function DrawCard_Model.HundredDrawRewardReq(index) local msg = draw_card_info_pb.HundredDrawRewardReq() msg.index = index NetManager.SendMessage(MessageEnums.MessageHundredDrawReward, msg) end function private.HundredDrawRewardResponse(msgResp) if msgResp.Resp.Code == 0 then EventSystem.Dispatch(EventID.UI_DrawCard_Refresh_MainUI) end end -- ------------------------------配置表数据---------------------------------------------------- function DrawCard_Model.InitCardPool() for i, v in DataSheetManager.DrawCardData:GetEnumerator() do if v.IsShow == 1 then table.insert(private.cardPool, v) end end --按照权重排序 table.sort(private.cardPool, function (a, b) return a.ShowWeight > b.ShowWeight end) end --获取卡池数据 function DrawCard_Model.GetCardPoolCfgData() return private.cardPool end function DrawCard_Model.GetCardDataByID(ID) local cardData for i=1,#private.cardPool do if private.cardPool[i].ID == ID then cardData = private.cardPool[i] break end end return cardData end --获取免费抽卡次数 function DrawCard_Model.GetFreeCount(ID) local DrawCardInfo = private.cardServerInfo[ID] if DrawCardInfo ~= nil then return DrawCardInfo.freeNums end return 0 end --获取抽卡消耗道具ID、背包中的数量、配置数量 function DrawCard_Model.GetConstItemAndNum(ID) local cardData = DrawCard_Model.GetCardDataByID(ID) if cardData == nil then return 0,0,0,0 end local countInBag = MDL.Bag.GetItemCount(cardData.Item) return cardData.Item, countInBag, cardData.ItemNum, cardData.ItemStoreID end --获取历史数据 function DrawCard_Model.GetHistoryData(ID) return private.cardServerInfo[ID] and private.cardServerInfo[ID].drawCardHistory or nil end return DrawCard_Model