PGRData/Script/matrix/xentity/xpurchase/XPurchasePackage.lua
2024-09-01 22:49:41 +02:00

348 lines
No EOL
14 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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