forked from endernon/PGRData
348 lines
No EOL
14 KiB
Lua
348 lines
No EOL
14 KiB
Lua
local XPurchasePackage = XClass(nil, "XPurchasePackage")
|
||
local Application = CS.UnityEngine.Application
|
||
local Platform = Application.platform
|
||
local RuntimePlatform = CS.UnityEngine.RuntimePlatform
|
||
|
||
function XPurchasePackage:Ctor(id)
|
||
-- XPurchaseClientInfo
|
||
self.Data = nil
|
||
end
|
||
|
||
-- XPurchaseClientInfo
|
||
function XPurchasePackage:InitWithServerData(data)
|
||
self.Data = data
|
||
end
|
||
|
||
function XPurchasePackage:GetRawData()
|
||
return self.Data
|
||
end
|
||
|
||
function XPurchasePackage:GetId()
|
||
return self.Data.Id
|
||
end
|
||
|
||
function XPurchasePackage:GetName()
|
||
return self.Data.Name
|
||
end
|
||
|
||
function XPurchasePackage:GetDesc()
|
||
return self.Data.Desc
|
||
end
|
||
|
||
function XPurchasePackage:GetIcon()
|
||
return self.Data.Icon
|
||
end
|
||
|
||
function XPurchasePackage:GetUiType()
|
||
return self.Data.UiType
|
||
end
|
||
|
||
-- 获取购买次数限制
|
||
function XPurchasePackage:GetBuyLimitTime()
|
||
return self.Data.BuyLimitTimes
|
||
end
|
||
|
||
-- 获取当前购买次数
|
||
function XPurchasePackage:GetCurrentBuyTime()
|
||
return self.Data.BuyTimes
|
||
end
|
||
|
||
-- 获取每日奖励领取剩余天数
|
||
function XPurchasePackage:GetDailyRewardRemainDay()
|
||
if self.Data.BuyTimes > 0 then
|
||
return self.Data.DailyRewardRemainDay
|
||
end
|
||
return 0
|
||
end
|
||
|
||
function XPurchasePackage:GetConsumeCount()
|
||
return self.Data.ConsumeCount
|
||
end
|
||
|
||
function XPurchasePackage:GetConsumeId()
|
||
return self.Data.ConsumeId
|
||
end
|
||
|
||
function XPurchasePackage:GetClientResetInfo()
|
||
return self.Data.ClientResetInfo
|
||
end
|
||
|
||
--######################## 将旧Ui耦合的逻辑直接迁移到数据层中处理 BEGIN ########################
|
||
function XPurchasePackage:CheckCanBuy(count, disCountCouponIndex, notEnoughCb)
|
||
count = count or 1
|
||
disCountCouponIndex = disCountCouponIndex or 0
|
||
if self.Data.BuyLimitTimes > 0 and self.Data.BuyTimes == self.Data.BuyLimitTimes then --卖完了,不管。
|
||
XUiManager.TipText("PurchaseLiSellOut")
|
||
return 0
|
||
end
|
||
if self.Data.TimeToShelve > 0 and self.Data.TimeToShelve > XTime.GetServerNowTimestamp() then --没有上架
|
||
XUiManager.TipText("PurchaseBuyNotSet")
|
||
return 0
|
||
end
|
||
if self.Data.TimeToUnShelve > 0 and self.Data.TimeToUnShelve < XTime.GetServerNowTimestamp() then --下架了
|
||
XUiManager.TipText("PurchaseSettOff")
|
||
return 0
|
||
end
|
||
if self.Data.TimeToInvalid > 0 and self.Data.TimeToInvalid < XTime.GetServerNowTimestamp() then --失效了
|
||
XUiManager.TipText("PurchaseSettOff")
|
||
return 0
|
||
end
|
||
if self.Data.ConsumeCount > 0 and self.Data.ConvertSwitch <= 0 then -- 礼包内容全部拥有
|
||
XUiManager.TipText("PurchaseRewardAllHaveErrorTips")
|
||
return 0
|
||
end
|
||
local consumeCount = self.Data.ConsumeCount
|
||
if disCountCouponIndex and disCountCouponIndex ~= 0 then
|
||
local disCountValue = XDataCenter.PurchaseManager.GetLBCouponDiscountValue(self.Data, disCountCouponIndex)
|
||
consumeCount = math.floor(disCountValue * consumeCount)
|
||
else
|
||
if self.Data.ConvertSwitch and consumeCount > self.Data.ConvertSwitch then -- 已经被服务器计算了抵扣和折扣后的钱
|
||
consumeCount = self.Data.ConvertSwitch
|
||
end
|
||
if XPurchaseConfigs.GetTagType(self.Data.Tag) == XPurchaseConfigs.PurchaseTagType.Discount then -- 计算打折后的钱(普通打折或者选择了打折券)
|
||
local disCountValue = XDataCenter.PurchaseManager.GetLBDiscountValue(self.Data)
|
||
consumeCount = math.floor(disCountValue * consumeCount)
|
||
end
|
||
end
|
||
consumeCount = count * consumeCount -- 全部数量的总价
|
||
if consumeCount > 0 and consumeCount > XDataCenter.ItemManager.GetCount(self.Data.ConsumeId) then --钱不够
|
||
-- local name = XDataCenter.ItemManager.GetItemName(self.Data.ConsumeId) or ""
|
||
-- local tips = XUiHelper.GetText("PurchaseBuyKaCountTips", name)
|
||
if XUiHelper.CanBuyInOtherPlatformHongKa(consumeCount) then
|
||
return 2
|
||
end
|
||
local tips = XUiHelper.GetCountNotEnoughTips(self.Data.ConsumeId);
|
||
XUiManager.TipMsg(tips,XUiManager.UiTipType.Wrong)
|
||
if self.Data.ConsumeId == XDataCenter.ItemManager.ItemId.PaidGem then
|
||
if notEnoughCb then
|
||
notEnoughCb(XPurchaseConfigs.TabsConfig.HK)
|
||
end
|
||
elseif self.Data.ConsumeId == XDataCenter.ItemManager.ItemId.HongKa then
|
||
if notEnoughCb then
|
||
notEnoughCb(XPurchaseConfigs.TabsConfig.Pay)
|
||
end
|
||
end
|
||
return 0
|
||
end
|
||
return 1
|
||
end
|
||
|
||
function XPurchasePackage:HandleBeforeBuy(successCb)
|
||
if self.__OpenBuyTipsList == nil then self.__OpenBuyTipsList = {} end
|
||
-- 礼包被计算拥有物品折扣价后,拥有物品不会下发,所以无需二次提示转化碎片
|
||
if self.Data.ConvertSwitch and self.Data.ConsumeCount > self.Data.ConvertSwitch then
|
||
if successCb then successCb() end
|
||
return
|
||
end
|
||
local rewardGoodsList = self.Data.RewardGoodsList
|
||
if not rewardGoodsList then
|
||
if successCb then successCb() end
|
||
return
|
||
end
|
||
for _, v in pairs(rewardGoodsList) do
|
||
if XRewardManager.IsRewardWeaponFashion(v.RewardType, v.TemplateId) then
|
||
local isHave, ownRewardIsLimitTime, rewardIsLimitTime, leftTime = XRewardManager.CheckRewardOwn(v.RewardType, v.TemplateId)
|
||
if isHave then
|
||
if not ownRewardIsLimitTime or not rewardIsLimitTime then
|
||
local tipContent = {}
|
||
tipContent["title"] = XUiHelper.GetText("WeaponFashionConverseTitle")
|
||
--自己拥有的武器涂装是限时的去买永久的
|
||
if ownRewardIsLimitTime and not rewardIsLimitTime then
|
||
local timeText = XUiHelper.GetTime(leftTime, XUiHelper.TimeFormatType.ACTIVITY)
|
||
tipContent["content"] = #rewardGoodsList > 1 and XUiHelper.GetText("OwnLimitBuyForeverWeaponFashionGiftConverseText", timeText) or XUiHelper.GetText("OwnLimitBuyForeverWeaponFashionConverseText", timeText)
|
||
--自己拥有的武器涂装是永久的去买限时的
|
||
elseif not ownRewardIsLimitTime and rewardIsLimitTime then
|
||
tipContent["content"] = XUiHelper.GetText("OwnForeverBuyLimitWeaponFashionConverseText")
|
||
--自己拥有的武器涂装是永久的去买永久的
|
||
elseif not ownRewardIsLimitTime and not rewardIsLimitTime then
|
||
tipContent["content"] = XUiHelper.GetText("OwnForeverBuyForeverWeaponFashionConverseText")
|
||
end
|
||
table.insert(self.__OpenBuyTipsList, tipContent)
|
||
else
|
||
--自己拥有的武器涂装是限时的去买限时的
|
||
self.__IsCheckOpenAddTimeTips = true
|
||
end
|
||
end
|
||
elseif XRewardManager.IsRewardFashion(v.RewardType, v.TemplateId)
|
||
and XRewardManager.CheckRewardOwn(v.RewardType, v.TemplateId) then
|
||
local tipContent = {}
|
||
tipContent["title"] = XUiHelper.GetText("PurchaseFashionRepeatTipsTitle")
|
||
tipContent["content"] = XUiHelper.GetText("PurchaseFashionRepeatTipsContent")
|
||
table.insert(self.__OpenBuyTipsList, tipContent)
|
||
end
|
||
end
|
||
if #self.__OpenBuyTipsList > 0 then
|
||
self:__OpenBuyTips(successCb)
|
||
return
|
||
end
|
||
if successCb then successCb() end
|
||
end
|
||
|
||
function XPurchasePackage:__OpenBuyTips(cb)
|
||
local tipContent = table.remove(self.__OpenBuyTipsList, 1)
|
||
local sureCallback = function ()
|
||
if #self.__OpenBuyTipsList > 0 then
|
||
self:__OpenBuyTips()
|
||
else
|
||
if cb then cb() end
|
||
end
|
||
end
|
||
local closeCallback = function()
|
||
self.__OpenBuyTipsList = {}
|
||
end
|
||
XUiManager.DialogTip(tipContent["title"], tipContent["content"], XUiManager.DialogType.Normal, closeCallback, sureCallback)
|
||
end
|
||
|
||
function XPurchasePackage:HandleBuyFinished(rewardList)
|
||
if self.__IsCheckOpenAddTimeTips then
|
||
if not rewardList then return end
|
||
if self.__TipsTemplateContentList == nil then self.__TipsTemplateContentList = {} end
|
||
local descStr
|
||
for _, v in pairs(rewardList) do
|
||
if XRewardManager.IsRewardWeaponFashion(v.RewardType, v.TemplateId)then
|
||
descStr = self:GetRewardWeaponFashionDescStr(v.TemplateId)
|
||
if descStr then
|
||
table.insert(self.__TipsTemplateContentList, descStr)
|
||
end
|
||
end
|
||
end
|
||
self:__OpenAddTimeTips()
|
||
self.__IsCheckOpenAddTimeTips = nil
|
||
end
|
||
end
|
||
|
||
function XPurchasePackage:__OpenAddTimeTips()
|
||
if #self.__TipsTemplateContentList > 0 then
|
||
local content = table.remove(self.__TipsTemplateContentList)
|
||
XUiManager.TipMsg(content, nil, function() self:__OpenAddTimeTips() end)
|
||
end
|
||
end
|
||
|
||
-- v1.28-采购优化-检测是否礼包内是否第一件物品为时装
|
||
function XPurchasePackage:CheckIsSingleFashion()
|
||
--部分礼包配表没有RewardId,只有MailId
|
||
if self.Data.RewardGoodsList == nil then
|
||
return false
|
||
end
|
||
|
||
local good = self.Data.RewardGoodsList[1]
|
||
if good.RewardType == XRewardManager.XRewardType.Fashion then
|
||
return good.TemplateId, false
|
||
elseif good.RewardType == XRewardManager.XRewardType.WeaponFashion then
|
||
return good.TemplateId, true
|
||
elseif XDataCenter.ItemManager.IsWeaponFashion(good.TemplateId) then
|
||
local templateId = XDataCenter.ItemManager.GetWeaponFashionId(good.TemplateId)
|
||
return templateId, true
|
||
end
|
||
return false
|
||
end
|
||
|
||
function XPurchasePackage:GetUiFashionDetailBuyData(buyFinishedFunc, notEnoughCb)
|
||
local disCountValue = XDataCenter.PurchaseManager.GetLBDiscountValue(self.Data)
|
||
local buyData = {}
|
||
-- 全部拥有才算购买过该礼包
|
||
buyData.IsHave = XRewardManager.CheckRewardGoodsListIsOwnWithAll(self.Data.RewardGoodsList)
|
||
if self.Data.PayKeySuffix then --直购显示图标特殊处理
|
||
buyData.PayKeySuffix = self.Data.PayKeySuffix
|
||
else
|
||
buyData.ItemIcon = XDataCenter.ItemManager.GetItemIcon(self.Data.ConsumeId)
|
||
end
|
||
buyData.ItemCount = math.modf(self.Data.ConvertSwitch * disCountValue)
|
||
buyData.BuyCallBack = function()
|
||
if self:CheckCanBuy(nil, nil, notEnoughCb) then
|
||
if self.Data and self.Data.Id then
|
||
local mergeBuyFinishedCb = function(rewardList)
|
||
self:HandleBuyFinished(rewardList)
|
||
if buyFinishedFunc then
|
||
buyFinishedFunc()
|
||
end
|
||
end
|
||
if self.Data.PayKeySuffix then
|
||
local key
|
||
if Platform == RuntimePlatform.Android then
|
||
key = string.format("%s%s", XPayConfigs.GetPlatformConfig(1), self.Data.PayKeySuffix)
|
||
elseif Platform == RuntimePlatform.IPhonePlayer then
|
||
key = string.format("%s%s", XPayConfigs.GetPlatformConfig(2), self.Data.PayKeySuffix)
|
||
else
|
||
key = string.format("%s%s", XPayConfigs.GetPlatformConfig(0), self.Data.PayKeySuffix)
|
||
end
|
||
XDataCenter.PayManager.Pay(key, 1, {self.Data.Id,self.Data.UiType}, self.Data.Id)
|
||
else
|
||
XDataCenter.PurchaseManager.PurchaseRequest(self.Data.Id, mergeBuyFinishedCb, 1, nil, self:GetUiTypes())
|
||
end
|
||
end
|
||
end
|
||
end
|
||
buyData.FashionLabel = self.Data.FashionLabel
|
||
-- v1.28-采购优化-赠品队列过滤涂装
|
||
local graftRewartdIds = {}
|
||
for index, item in ipairs(self.Data.RewardGoodsList) do
|
||
if index ~= 1 then
|
||
table.insert(graftRewartdIds, item)
|
||
end
|
||
end
|
||
buyData.GiftRewardId = #graftRewartdIds > 0 and graftRewartdIds or nil
|
||
return buyData
|
||
end
|
||
|
||
--######################## 将旧Ui耦合的逻辑直接迁移到数据层中处理 END ########################
|
||
|
||
function XPurchasePackage:GetUiType()
|
||
return self.Data.UiType
|
||
end
|
||
|
||
function XPurchasePackage:GetUiTypes()
|
||
local result = {}
|
||
local config = XPurchaseConfigs.GetUiTypeConfigByType(self:GetUiType())
|
||
local configs = XPurchaseConfigs.GetUiTypesByTab(config.GroupType)
|
||
for _, value in pairs(configs) do
|
||
table.insert(result, value.UiType)
|
||
end
|
||
return result
|
||
end
|
||
|
||
function XPurchasePackage:GetIsSellOut()
|
||
-- 逻辑直接迁移历史Ui逻辑
|
||
local nowTime = XTime.GetServerNowTimestamp()
|
||
if self.Data.TimeToInvalid and self.Data.TimeToInvalid > 0 then
|
||
local remainTime = self.Data.TimeToInvalid - nowTime
|
||
if remainTime <= 0 then
|
||
return true
|
||
end
|
||
end
|
||
if self.Data.BuyLimitTimes and self.Data.BuyLimitTimes > 0
|
||
and self.Data.BuyTimes == self.Data.BuyLimitTimes then
|
||
return true
|
||
end
|
||
if self.Data.TimeToUnShelve > 0 then
|
||
if nowTime >= self.Data.TimeToUnShelve then
|
||
return true
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
|
||
-- v1.31检查礼包奖励是否全部拥有
|
||
function XPurchasePackage:GetIsHave()
|
||
|
||
--部分礼包配表没有RewardId,只有MailId
|
||
if self.Data.RewardGoodsList == nil then
|
||
return false
|
||
end
|
||
|
||
-- 全部奖励都已拥有
|
||
local isHave = XRewardManager.CheckRewardGoodsListIsOwnWithAll(self.Data.RewardGoodsList)
|
||
if isHave then
|
||
return true
|
||
end
|
||
|
||
-- 非折价礼包:拥有涂装,仍为原价/0元。有涂装视为拥有此礼包
|
||
local isHaveFashion = XRewardManager.CheckRewardGoodsListIsOwnWithAll({self.Data.RewardGoodsList[1]})
|
||
if isHaveFashion and (self.Data.ConvertSwitch == self.Data.ConsumeCount or self.Data.ConvertSwitch == 0) then
|
||
return true
|
||
end
|
||
|
||
return false
|
||
end
|
||
|
||
return XPurchasePackage |