local PayMall_Model = {} local EventSystem = require 'Event/EventSystem' local private = {} local MonthCardNewGoodsList = "monthCardNewGoodsList" local MonthCardConstDataList = DataSheetManager.ConstData:GetDataByID("MonthCardShop_New").IntListValue PayMall_Model.ShopType = { Store = 1, PayMall = 2, } PayMall_Model.ShopFunctionType = { [PayMall_Model.ShopType.Store] = MDL.Unlock.FunctionType.Shop, [PayMall_Model.ShopType.PayMall] = MDL.Unlock.FunctionType.PayMall, } ------------------------- 系统函数 --------------------------------- function PayMall_Model.OnStartup() private.purchaseGoodRecords = {} private.costItemRecords = {} -- 双月卡商城商品是否显示“新”角标 private.monthCardNewGoodsList = PersistentData.DeviceData:Get(MonthCardNewGoodsList, false) if private.monthCardNewGoodsList then for k,v in ipairs(MonthCardConstDataList) do if private.monthCardNewGoodsList[v] == nil then private.monthCardNewGoodsList[v] = true end end else private.monthCardNewGoodsList = {} for k,v in ipairs(MonthCardConstDataList) do private.monthCardNewGoodsList[v] = true end PersistentData.DeviceData:Set(MonthCardNewGoodsList, private.monthCardNewGoodsList, true) end EventSystem.Regist(EventID.UI_OperationActivity_DataChanged, private.OnStaticDataChanged) end function private.OnStaticDataChanged() private.showList = {} private.payMallGoodsDict = {} private.showTabs = {} for _, v in MDL.OperationActivity.StoreTypeData:GetEnumerator() do if v.TypeID == PayMall_Model.ShopType.PayMall then private.payMallGoodsDict[v.TabID] = {} table.insert(private.showTabs, v) end end for _, v in MDL.OperationActivity.StoreGoodsData:GetEnumerator() do if private.payMallGoodsDict[v.TabID] then table.insert(private.payMallGoodsDict[v.TabID], v) end end ---遍历页签,如果该页签下没有物品,则不显示该页签 for i = #private.showTabs, 1, -1 do local tabId = private.showTabs[i].TabID if not private.payMallGoodsDict[tabId] or not next(private.payMallGoodsDict[tabId]) then table.remove(private.showTabs, i) end end private.dynamincLimitPurchases = {} for _, v in MDL.OperationActivity.StoreGoodsLimitBuyDetail:GetEnumerator() do if not private.dynamincLimitPurchases[v.ID] then private.dynamincLimitPurchases[v.ID] = {} end table.insert(private.dynamincLimitPurchases[v.ID], v) end for _, v in pairs (private.dynamincLimitPurchases) do table.sort(v, private.SortBuyLimitDatas) end end function PayMall_Model.OnShutdown() private.showList = nil private.showTabs = nil private.payMallGoodsDict = nil private.purchaseGoodRecords = nil private.costItemRecords = nil private.dynamincLimitPurchases = nil end --------------------------------------------------------------------- ------------------------------ 处理协议 ------------------------------ -- 商城 商铺购买信息协议处理 PayMall统一处理Shop模块 function PayMall_Model.SetStoreInfos(storeInfos) if not IsServerDataNotNil(storeInfos) then return end local isHasUpdate = false for _, storeInfo in ipairs (storeInfos) do local costInfoCount = (storeInfo.costInfos and #storeInfo.costInfos > 0) and #storeInfo.costInfos or 0 local goodsInfoCount = (storeInfo.goodsInfos and #storeInfo.goodsInfos > 0) and #storeInfo.goodsInfos or 0 local count = costInfoCount > goodsInfoCount and costInfoCount or goodsInfoCount if count > 0 then isHasUpdate = true for i = 1, count do -- 消耗购买货币数量 local costInfo = storeInfo.costInfos and storeInfo.costInfos[i] or nil if costInfo then if not private.costItemRecords[storeInfo.storeId] then private.costItemRecords[storeInfo.storeId] = {} end local costRecord = private.costItemRecords[storeInfo.storeId] if not costRecord[costInfo.costId] then costRecord[costInfo.costId] = 0 end costRecord[costInfo.costId] = costInfo.costNum end -- 道具购买数量 local goodInfo = storeInfo.goodsInfos and storeInfo.goodsInfos[i] or nil if goodInfo then if not private.purchaseGoodRecords[goodInfo.goodsId] then private.purchaseGoodRecords[goodInfo.goodsId] = 0 end private.purchaseGoodRecords[goodInfo.goodsId] = goodInfo.purchasedNums end end end end if isHasUpdate then for _ ,v in pairs (private.payMallGoodsDict) do table.sort(v, PayMall_Model.SortShowGoods) end CTL.PayMall.RefreshShopRedPoints() EventSystem.Dispatch(EventID.UI_PayMall_RefreshMain) EventSystem.Dispatch(EventID.UI_PayMall_RefreshPopUp) EventSystem.Dispatch(EventID.UI_Shop_RefreshShopInfo) EventSystem.Dispatch(EventID.UI_GachaShop_Refresh) EventSystem.Dispatch(EventID.UI_GachaShop_RefreshPopUp) end end -------------------------------------------------------------------- -- 返回tabID对应页签index 如果tab中没有找到则 返回-1 -- 返回当前显示list中itemID对应的loop位置,如果没有找到则返回-1 function PayMall_Model.GetTabIndexAndItemIndex(itemID) local tabIndex = 0 local tabList = CTL.PayMall.GetShopListByTab(CTL.PayMall.ShopTabType.Shop) for _, v in ipairs(tabList) do local itemIndex = 0 for _, good in ipairs(private.payMallGoodsDict[v.TabID]) do if CTL.PayMall.IsShowPurchase(good) then if good.ItemID == itemID then return tabIndex, itemIndex end itemIndex = itemIndex + 1 end end tabIndex = tabIndex + 1 end return -1, -1 end function PayMall_Model.OpenPayMallPopUp(itemID) local data = nil for _, v in ipairs(private.showTabs) do for _, good in ipairs(private.payMallGoodsDict[v.TabID]) do if CTL.PayMall.IsShowPurchase(good) then if good.ItemID == itemID then data = good break end end end end if data then CTL.PayMall.OpenPayMallPopUp(data) end end function PayMall_Model.GetShowTabIndexById(tabId) for i, v in ipairs(private.showTabs) do if v.TabID == tabId then return i - 1 end end end function PayMall_Model.GetShowTabs() return private.showTabs end function PayMall_Model.GetShowGoods(tabID) table.clearArray(private.showList) for _, v in ipairs (private.payMallGoodsDict[tabID]) do if CTL.PayMall.IsShowPurchase(v) then table.insert(private.showList, v) end end return private.showList end function PayMall_Model.GetPurchaseItemCount(goodData) if goodData and private.purchaseGoodRecords[goodData.ID] then return private.purchaseGoodRecords[goodData.ID] end return 0 end function PayMall_Model.GetCostItemCount(tabID, costID) if tabID and costID then local tabRecord = private.costItemRecords[tabID] if tabRecord and tabRecord[costID] then return tabRecord[costID] end end return 0 end function PayMall_Model.GetLimitedCount(goodData) if not goodData then return 0 end local limitDataList = private.dynamincLimitPurchases[goodData.ID] if limitDataList then for i = #limitDataList, 1, -1 do local data = limitDataList[i] local isComplete = true for _, v in ipairs (data.Tigger_Table) do if not MDL.Unlock.IsComplete(v.TriggerType, v.TriggerParam) then isComplete = false break end end if isComplete then return data.BuyLimit end end return 0 end return goodData.LimitBuyNum end function PayMall_Model.SortShowGoods(a, b) local aGoodType = CTL.PayMall.GetGoodType(a) local bGoodType = CTL.PayMall.GetGoodType(b) if aGoodType == bGoodType then return a.SortID > b.SortID end return aGoodType > bGoodType end --保存当前的商城的 tab 页签 function PayMall_Model.SaveCurrentShopTabIndex(tabIndex,childTabIndex) private.payMallTabIndex = tabIndex private.payMallChildTabIndex = childTabIndex end --获取当前的商城的Tab 页签 function PayMall_Model.GetCurrentShopTabIndex() local tabIndex,childTabIndex = private.payMallTabIndex, private.payMallChildTabIndex private.payMallTabIndex = nil private.payMallChildTabIndex = nil return tabIndex,childTabIndex end function private.SortBuyLimitDatas(a, b) return a.BuyLimit < b.BuyLimit end --region *************** 双月卡“新”角标 ******************* function PayMall_Model.GetMonthCardNewGoodsRedPoint() local goods = private.payMallGoodsDict[CTL.PayMall.ShopChildTabType.DoubleMonthCardShop] for k,v in ipairs(goods) do for newID, newState in pairs(private.monthCardNewGoodsList) do if v.ID == newID and newState == true then return true end end end return false end function PayMall_Model.GetMonthCardNewGoodRedPoint(goodsId) for newID, newState in pairs(private.monthCardNewGoodsList) do if goodsId == newID and newState == true then return true end end return false end function PayMall_Model.RemoveMonthCardNewGoodRedPoint() for newID, newState in pairs(private.monthCardNewGoodsList) do private.monthCardNewGoodsList[newID] = false end PersistentData.DeviceData:Set(MonthCardNewGoodsList, private.monthCardNewGoodsList, true) EventSystem.Dispatch(EventID.UI_PayMall_RefreshRedPoint) EventSystem.Dispatch(EventID.UI_DirectGift_GiftInfoUpdate) EventSystem.Dispatch(EventID.UI_MonthCard_RewardClaimRefresh) end --region *************** 双月卡“新”角标 ******************* return PayMall_Model