c1_lua/lua/app/module/shop/shop_manager.lua
2025-10-29 15:16:51 +08:00

331 lines
11 KiB
Lua

local ShopManager = class("ShopManager", BaseModule)
ShopManager.COMMERCE_TYPE = {
CHAPTER_GIFT = 1,
DAILY_STORE = 2,
GEM_STORE = 3,
GOLD_STORE = 4,
}
ShopManager.SUMMON_ID = {
NORMAL = 1,
EPIC = 2,
SSR = 3,
}
function ShopManager:showBuyGemUI()
UIManager:showUI("app/ui/shop/buy_gem_ui")
end
function ShopManager:showFirstRechargeUI()
UIManager:showUI("app/ui/shop/first_recharge_ui")
end
function ShopManager:showFundUI(showPage)
UIManager:showUI("app/ui/fund/fund_main_ui", {showPage = showPage})
end
function ShopManager:showFundRewardUI(params)
UIManager:showUI("app/ui/fund/fund_reward_ui", params)
end
function ShopManager:showThirdGiftPopUI()
UIManager:showUI("app/ui/shop/third_gift_pop_ui")
end
function ShopManager:showVoucherReceiveUI()
UIManager:showUI("app/ui/shop/voucher_receive_ui")
end
-- 展示竞技场ad宝箱
function ShopManager:showArenaAdBoxUI(isWin)
local params = {
isWin = isWin
}
UIManager:showUI("app/ui/shop/box_hero_ui", {arena = params})
end
-- 宝箱奖励开箱界面 type,params,rewards
function ShopManager:showBoxOpenUI(params)
return UIManager:showUI("app/ui/shop/open_box_ui", params)
end
-- 宝箱奖励展示界面
function ShopManager:showBoxRewardUI(params)
UIManager:showUI("app/ui/shop/box_reward_ui", params)
end
-- 章节礼包
function ShopManager:reqBuyChapterGift(id)
self:sendMessage(ProtoMsgType.FromMsgEnum.MallChapterBuyReq, {id = id}, self.rspBuyChapterGift, BIReport.ITEM_GET_TYPE.SHOP_CHAPTER)
end
function ShopManager:rspBuyChapterGift(result)
if result.err_code ~= GConst.ERROR_STR.SUCCESS then
return
end
GFunc.showRewardBox(result.rewards)
DataManager.ShopData:onBuyChapterGiftSuccess(result.reqData.id)
end
-- 魂芯商店
function ShopManager:reqBuyCoreSoulBox(id, free, times)
self:sendMessage(ProtoMsgType.FromMsgEnum.SoulSummonReq, {id = id, free = free, times = times}, self.rspBuyCoreSoulBox, BIReport.ITEM_GET_TYPE.SHOP_CORE_SOUL)
end
function ShopManager:rspBuyCoreSoulBox(result)
if result.err_code ~= GConst.ERROR_STR.SUCCESS then
return
end
DataManager.ShopData:onBuyCoreSoulBoxSuccess(result.reqData.id, result.reqData.free, result.reqData.times, result.trigger_count)
local rewards = {}
for _, reward in ipairs(result.rewards) do
if reward.type == GConst.REWARD_TYPE.SOUL then
table.insert(rewards, reward)
end
end
table.sort(rewards, function(a, b)
return a.soul.uid < b.soul.uid
end)
EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.CLOSE_BOX_REWARD_UI)
local goldKeyCost = 0
if result.reqData.id == GConst.ShopConst.CORE_SOUL_TYPE.ELITE then
if result.costs then
for _, cost in ipairs(result.costs) do
if cost.item and cost.item.id == GConst.ItemConst.GOLD_KEY then
goldKeyCost = cost.item.count
end
end
end
end
ModuleManager.TaskManager:addTaskProgress(GConst.TaskConst.TASK_TYPE.OPEN_CORE_SOUL_BOX, result.reqData, goldKeyCost)
if result.reqData.id then
local uiObj = self:showBoxOpenUI({type = GConst.BOX_REWARD_TYPE.SUMMON, openType = result.reqData.id, count = result.reqData.times, rewards = rewards})
uiObj:addEnterAniCompleteListener(function()
DataManager.ShopData:setDirty()
end)
end
-- bi
if result.reqData.id == GConst.ShopConst.CORE_SOUL_TYPE.NORMAL then
BIReport:postBoxReward(BIReport.BOX_TYPE.NORMAL_BOX, result.rewards, nil, result.reqData.free, result.reqData.times)
elseif result.reqData.id == GConst.ShopConst.CORE_SOUL_TYPE.ELITE then
BIReport:postBoxReward(BIReport.BOX_TYPE.EPIC_BOX, result.rewards, nil, result.reqData.free, result.reqData.times)
end
end
-- 每日商店
function ShopManager:reqBuyDailyGift(id)
self:sendMessage(ProtoMsgType.FromMsgEnum.MallDailyBuyReq, {id = id}, self.rspBuyDailyGift, BIReport.ITEM_GET_TYPE.SHOP_DAILY)
end
function ShopManager:rspBuyDailyGift(result)
if result.err_code ~= GConst.ERROR_STR.SUCCESS then
return
end
GFunc.showRewardBox(result.rewards)
DataManager.ShopData:refreshDailyShop(result.store)
end
-- 每日商店刷新
function ShopManager:reqRefreshDailyGift(isAd)
self:sendMessage(ProtoMsgType.FromMsgEnum.MallDailyRefreshReq, {Ad = isAd}, self.rspRefreshDailyGift, BIReport.ITEM_GET_TYPE.SHOP_DAILY_REFRESH)
end
function ShopManager:rspRefreshDailyGift(result)
if result.err_code ~= GConst.ERROR_STR.SUCCESS then
return
end
DataManager.ShopData:refreshDailyShop(result.store)
end
function ShopManager:reqBuyEmblemGift(id)
self:sendMessage(ProtoMsgType.FromMsgEnum.MallMythicBuyReq, {id = id}, self.rspBuyEmblemGift, BIReport.ITEM_GET_TYPE.SHOP_EMBLEM)
end
function ShopManager:rspBuyEmblemGift(result)
if result.err_code ~= GConst.ERROR_STR.SUCCESS then
return
end
GFunc.showRewardBox(result.rewards)
DataManager.ShopData:onBuyEmblemGiftSuccess(result.reqData.id)
end
-- 金币商店
function ShopManager:reqBuyGoldGift(id)
self:sendMessage(ProtoMsgType.FromMsgEnum.MallGoldBuyReq, {id = id}, self.rspBuyGoldGift, BIReport.ITEM_GET_TYPE.SHOP_GOLD)
end
function ShopManager:rspBuyGoldGift(result)
if result.err_code ~= GConst.ERROR_STR.SUCCESS then
return
end
GFunc.showRewardBox(result.rewards)
DataManager.ShopData:onBuyGoldGiftSuccess(result.reqData.id)
end
-- 钻石商店
function ShopManager:onBuyGemGift(id, doubleType)
PayManager:purchasePackage(id, PayManager.PURCHARSE_TYPE.SHOP_GEM, nil, doubleType)
end
-- 首冲礼包购买
function ShopManager:onBuyFirstRecharge(gear, day)
PayManager:purchasePackage(DataManager.ShopData:getFirstRechargeGiftId(gear, day), PayManager.PURCHARSE_TYPE.ACT_GIFT, true)
end
-- 购买体力
function ShopManager:reqBuyVit(buyType)
if buyType == GConst.VIT_BUY_TYPE.AD then
self:sendMessage(ProtoMsgType.FromMsgEnum.EnergyByADReq, {}, self.rspBuyVit, BIReport.ITEM_GET_TYPE.BUY_VIT)
else
self:sendMessage(ProtoMsgType.FromMsgEnum.EnergyByDiamondReq, {}, self.rspBuyVit, BIReport.ITEM_GET_TYPE.BUY_VIT)
end
end
function ShopManager:rspBuyVit(result)
if result.err_code ~= GConst.ERROR_STR.SUCCESS then
return
end
GFunc.showRewardBox(result.rewards)
DataManager.ShopData:onVitBuySuccess(result.energy_limit)
-- 累计购买体力X次
ModuleManager.TaskManager:addTaskProgress(GConst.TaskConst.TASK_TYPE.BUY_VIT_NUM)
end
function ShopManager:checkWebPurchaseGift()
if DataManager.TutorialData:getIsInTutorial() then
return false
end
if DataManager.ShopData:getNeedShowGiftReceiveUI() then
ModuleManager.ShopManager:showThirdGiftPopUI()
return true
end
return false
end
--@region 领取三方支付礼包
function ShopManager:receiveWebPurchaseGiftRewards()
local orders = DataManager.ShopData:getThirdPayGiftOrders()
local orderIds = {}
for k, v in ipairs(orders) do
table.insert(orderIds, v.order_id)
end
local parmas = {
order_ids = orderIds
}
self:sendMessage(ProtoMsgType.FromMsgEnum.ThirdPayGiftReq, parmas, self.onReceiveWebPurchaseGiftRewards, BIReport.ITEM_GET_TYPE.WEB_PAY_GIFT)
end
function ShopManager:onReceiveWebPurchaseGiftRewards(result)
if result.err_code ~= GConst.ERROR_STR.SUCCESS then
return
end
if result.rewards then
GFunc.showRewardBox(result.rewards)
end
local isJollyMax = false
for k, v in ipairs(result.reqData.order_ids) do
local orderInfo = DataManager.ShopData:getThirdPayGiftOrderInfo(v)
if orderInfo then
local cfg
local rewards
local giftId = orderInfo.gift_id
if orderInfo.gift_type == PayManager.PURCHARSE_TYPE.ACT_GIFT then
cfg = ConfigManager:getConfig("act_gift")[giftId]
rewards = cfg.reward
elseif orderInfo.gift_type == PayManager.PURCHARSE_TYPE.GIFT_ROUTINE then
cfg = ConfigManager:getConfig("gift_routine")[giftId]
rewards = cfg.reward
elseif orderInfo.gift_type == PayManager.PURCHARSE_TYPE.SHOP_GEM then
cfg = ConfigManager:getConfig("mall_treasure")[giftId]
rewards = {}
if cfg.reward then
for i,v in ipairs(cfg.reward) do
table.insert(rewards, v)
end
if DataManager.PaymentData:isGemStoreDouble(giftId) then
for i,v in ipairs(cfg.reward) do
table.insert(rewards, v)
end
end
end
elseif orderInfo.gift_type == PayManager.PURCHARSE_TYPE.GIFT_JOLLYMAX then
cfg = ConfigManager:getConfig("gift_jollymax")[giftId]
rewards = cfg.reward
isJollyMax = true
end
if isJollyMax or VersionCompatible:getIsRUPackage() then
-- local rCfg = ConfigManager:getConfig("recharge")[cfg.recharge_id]
-- local productId = rCfg[VersionCompatible:getRechargePayId()]
local productId = cfg.goods_id
BIReport:postReceiveThirdPayJollyMaxGiftRewards(orderInfo.order_id, productId, orderInfo.gift_id, orderInfo.revenue, rewards, cfg.price)
BIReport:postJollyMaxPurchase(orderInfo.revenue, productId, orderInfo.order_id)
else
local rCfg = ConfigManager:getConfig("recharge")[cfg.recharge_id]
local productId = rCfg[VersionCompatible:getRechargePayId()]
BIReport:postReceiveThirdPayGiftRewars(orderInfo.order_id, productId, orderInfo.gift_id, orderInfo.revenue, rewards, rCfg.price)
BIReport:postVTCPurchase(orderInfo.revenue, productId, orderInfo.order_id)
end
end
end
-- 购买礼包后续处理
if isJollyMax or VersionCompatible:getIsRUPackage() then
PayManager:requestThirdJollyMaxGiftRewards(result.gifts or {})
else
PayManager:requestThirdGiftRewards(result.gifts or {})
end
DataManager.ShopData:deleteThirdPayGiftOrders(result.reqData.order_ids)
EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.RECEIVE_WEB_PURCHASE_REWARDS_SUCCESS)
end
--@endregion
function ShopManager:checkWebPurchase()
if DataManager.TutorialData:getIsInTutorial() then
return false
end
if DataManager.ShopData:getNeedShowVoucherReceiveUI() then
self:showVoucherReceiveUI()
return true
end
return false
end
function ShopManager:receiveWebPurchaseRewards()
local orders = DataManager.ShopData:getThirdPayOrders()
local orderIds = {}
for k, v in ipairs(orders) do
table.insert(orderIds, v.order_id)
end
local parmas = {
order_ids = orderIds
}
self:sendMessage(ProtoMsgType.FromMsgEnum.ThirdPayClaimReq, parmas, self.onReceiveWebPurchaseRewards, BIReport.ITEM_GET_TYPE.WEB_PAY)
end
function ShopManager:onReceiveWebPurchaseRewards(result)
if result.err_code ~= GConst.ERROR_STR.SUCCESS then
return
end
GFunc.showRewardBox(result.rewards)
for k, v in ipairs(result.reqData.order_ids) do
local orderInfo = DataManager.ShopData:getThirdPayOrderInfo(v)
if orderInfo then
BIReport:postReceiveThirdPayRewars(orderInfo.order_id, orderInfo.voucher, orderInfo.product_id, orderInfo.revenue, orderInfo.price)
BIReport:postWebPurchase(orderInfo.revenue, orderInfo.product_id, orderInfo.order_id)
end
end
DataManager.ShopData:deleteThirdPayOrders(result.reqData.order_ids)
EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.RECEIVE_WEB_PURCHASE_REWARDS_SUCCESS)
end
return ShopManager