Files
Endfield-Data/LuaScripts/UI/Panels/GachaWeaponPool/GachaWeaponPoolCtrl.lua
2025-12-02 20:37:18 +07:00

707 lines
25 KiB
Lua
Raw Permalink 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 uiCtrl = require_ex('UI/Panels/Base/UICtrl')
local PANEL_ID = PanelId.GachaWeaponPool
GachaWeaponPoolCtrl = HL.Class('GachaWeaponPoolCtrl', uiCtrl.UICtrl)
GachaWeaponPoolCtrl.s_messages = HL.StaticField(HL.Table) << {
[MessageConst.ON_GACHA_SUCC] = 'OnGachaSucc',
[MessageConst.ON_WALLET_CHANGED] = 'OnWalletChanged',
[MessageConst.ON_ITEM_COUNT_CHANGED] = 'OnWalletChanged',
[MessageConst.ON_GACHA_POOL_ROLE_DATA_CHANGED] = 'OnGachaPoolRoleDataChanged',
[MessageConst.ON_SHOP_GOODS_CONDITION_REFRESH] = 'CloseSelf',
[MessageConst.GACHA_WEAPON_POOL_ADD_SHOW_REWARD] = 'AddQueueReward',
[MessageConst.ON_ONE_GACHA_WEAPON_POOL_REWARD_FINISHED] = 'OnOneQueueRewardFinished',
}
GachaWeaponPoolCtrl.m_goodsData = HL.Field(CS.Beyond.Gameplay.ShopSystem.GoodsData)
GachaWeaponPoolCtrl.m_poolId = HL.Field(HL.String) << ""
GachaWeaponPoolCtrl.m_price = HL.Field(HL.Number) << 0
GachaWeaponPoolCtrl.m_itemNoUpCache = HL.Field(HL.Forward('UIListCache'))
GachaWeaponPoolCtrl.m_moneyCellCache = HL.Field(HL.Forward('UIListCache'))
GachaWeaponPoolCtrl.m_createdWeaponInsts = HL.Field(HL.Table)
GachaWeaponPoolCtrl.m_isRequesting = HL.Field(HL.Boolean) << false
GachaWeaponPoolCtrl.m_gachaFlowCoroutine = HL.Field(HL.Thread)
GachaWeaponPoolCtrl.m_loopRewardItemUIList = HL.Field(HL.Table)
GachaWeaponPoolCtrl.m_gachaWeaponGoodsCostInfo = HL.Field(HL.Table)
GachaWeaponPoolCtrl.CloseSelf = HL.Method() << function(self)
if PhaseManager:GetTopPhaseId() ~= PhaseId.GachaWeaponPool then
return
end
PhaseManager:PopPhase(PhaseId.GachaWeaponPool)
end
GachaWeaponPoolCtrl.OnCreate = HL.Override(HL.Any) << function(self, arg)
local goodsData = arg.goodsData
self.m_goodsData = goodsData
local goodsTemplate = goodsData.goodsTemplateId
local shopGoodsData = Tables.shopGoodsTable:GetValue(goodsTemplate)
self.m_poolId = shopGoodsData.weaponGachaPoolId
self.m_price = shopGoodsData.price
self.m_createdWeaponInsts = {}
self.view.closeBtn.onClick:AddListener(function()
PhaseManager:PopPhase(PhaseId.GachaWeaponPool)
end)
self.view.maskBgImage.onClick:AddListener(function()
PhaseManager:PopPhase(PhaseId.GachaWeaponPool)
end)
self.view.gachaBtn.onClick:AddListener(function()
self:_OnGachaBtnClick()
end)
self.view.detailTipsBtn.gameObject:SetActive(not GameInstance.player.gameSettingSystem.forbiddenWebView)
self.view.tipsDetailBtn.interactable = not GameInstance.player.gameSettingSystem.forbiddenWebView
self.view.detailTipsBtn.onClick:AddListener(function()
CS.Beyond.SDK.SDKUtils.OpenHGWebPortalSDK("gacha_weapon", string.format("{\"pool_id\":\"%s\"}", self.m_poolId), nil)
end)
self.view.tipsDetailBtn.onClick:AddListener(function()
CS.Beyond.SDK.SDKUtils.OpenHGWebPortalSDK("gacha_weapon", string.format("{\"pool_id\":\"%s\"}", self.m_poolId), nil)
end)
self.view.noMoneyBtn.onClick:AddListener(function()
UIManager:Open(PanelId.GachaWeaponInsufficient)
end)
self.m_itemNoUpCache = UIUtils.genCellCache(self.view.itemNoUp)
self.m_moneyCellCache = UIUtils.genCellCache(self.view.moneyCell)
self.m_loopRewardItemUIList = {}
table.insert(self.m_loopRewardItemUIList, self.view.guaranteeRewardNode.loopRewardItem1)
table.insert(self.m_loopRewardItemUIList, self.view.guaranteeRewardNode.loopRewardItem2)
self.m_showRewardFuncQueue = require_ex("Common/Utils/DataStructure/Queue")()
self.view.controllerHintPlaceholder:InitControllerHintPlaceholder({ self.view.inputGroup.groupId })
self.view.weaponShowMessageNaviGroup.onIsFocusedChange:AddListener(function(isFocused)
if isFocused then
InputManagerInst.controllerNaviManager:SetTarget(self.view.itemUp.view.button)
end
end)
self:_InitData()
end
GachaWeaponPoolCtrl.OnShow = HL.Override() << function(self)
GameInstance.player.shopSystem:SetSingleGoodsIdSee(self.m_goodsData.goodsId)
local time = Time.unscaledTime
self.loader:LoadGameObjectAsync("Assets/Beyond/DynamicAssets/Gameplay/Prefabs/Gacha/GachaWeaponPreheat.prefab", function()
logger.info("GachaOutside 预载完成", Time.unscaledTime - time)
end)
if not self.m_isRequesting then
self:CheckAndShowSpecialRewardPopup()
self:_TryShowQueueReward()
end
end
GachaWeaponPoolCtrl._InitData = HL.Method() << function(self)
local poolInfo = GameInstance.player.gacha.poolInfos:get_Item(self.m_poolId)
local poolData = poolInfo.data
self:OnWalletChanged()
self.view.priceIconImg:LoadSprite(UIConst.UI_SPRITE_WALLET, self.m_gachaWeaponGoodsCostInfo.costMoneyId)
self.view.priceNumTxt.text = self.m_gachaWeaponGoodsCostInfo.costMoneyCount
self.view.originalCostTxt.text = self.m_gachaWeaponGoodsCostInfo.costMoneyCount
if not string.isEmpty(self.m_gachaWeaponGoodsCostInfo.costTicketId) then
self.view.ticketIcon:LoadSprite(UIConst.UI_SPRITE_WALLET, self.m_gachaWeaponGoodsCostInfo.costTicketId)
self.view.ticketCostNumTxt.text = self.m_gachaWeaponGoodsCostInfo.costTicketCount
end
local upWeaponId = poolData.upWeaponIds[0]
local weaponItemCfg = Tables.itemTable:GetValue(upWeaponId)
self.view.weaponIconImg:LoadSprite(UIConst.UI_SPRITE_ITEM, weaponItemCfg.iconId)
self.view.weaponNameTxt.text = poolData.name
self:_UpdateRemainingTime()
self:_StartCoroutine(function()
while true do
coroutine.wait(UIConst.COMMON_UI_TIME_UPDATE_INTERVAL)
self:_UpdateRemainingTime()
end
end)
self.view.itemUp:InitItem({ id = upWeaponId, forceHidePotentialStar = true }, function()
CashShopUtils.ShowWikiWeaponPreview(self.m_poolId, upWeaponId)
end)
local contentData = Tables.gachaWeaponPoolContentTable[self.m_poolId]
local items = {}
for _, v in pairs(contentData.list) do
if v.starLevel == 6 and v.itemId ~= upWeaponId then
table.insert(items, { id = v.itemId, forceHidePotentialStar = true })
end
end
self.m_itemNoUpCache:Refresh(#items, function(cell, index)
cell:InitItem(items[index], function()
CashShopUtils.ShowWikiWeaponPreview(self.m_poolId, items[index].id)
end)
end)
local gachaTypeCfg = Tables.gachaWeaponPoolTypeTable[poolData.type]
local greyTxt6 = string.format(
gachaTypeCfg.softGuarantee - poolInfo.softGuaranteeProgress > 10 and Language.LUA_GACHA_WEAPON_POOL_DESC_STAR_6 or Language.LUA_GACHA_WEAPON_POOL_DESC_STAR_6_CURR,
math.ceil((gachaTypeCfg.softGuarantee - poolInfo.softGuaranteeProgress) / 10))
self.view.greyTxt:SetAndResolveTextStyle(greyTxt6)
local guaranteeRewardNode = self.view.guaranteeRewardNode
local showHardGuarantee = poolInfo.upGotCount <= 0 and poolInfo.hardGuaranteeProgress <= gachaTypeCfg.hardGuarantee
if showHardGuarantee then
guaranteeRewardNode.hardGuaranteeNode.gameObject:SetActive(true)
guaranteeRewardNode.upWeaponNameTxt.text = weaponItemCfg.name
guaranteeRewardNode.upWeaponIconImg:LoadSprite(UIConst.UI_SPRITE_ITEM, weaponItemCfg.iconId)
local weaponCfg = Tables.weaponBasicTable[upWeaponId]
local weaponTypeIconName = UIConst.WEAPON_EXHIBIT_WEAPON_TYPE_ICON_PREFIX .. weaponCfg.weaponType:ToInt()
guaranteeRewardNode.upWeaponTypeIconImg:LoadSprite(UIConst.UI_SPRITE_WEAPON_EXHIBIT, weaponTypeIconName)
local hardGuaranteeDesc = string.format(Language.LUA_GACHA_WEAPON_POOL_DESC_UP, math.ceil((gachaTypeCfg.hardGuarantee - poolInfo.hardGuaranteeProgress) / 10), weaponItemCfg.name)
guaranteeRewardNode.hardGuaranteeTxt:SetAndResolveTextStyle(hardGuaranteeDesc)
guaranteeRewardNode.hardGuaranteeBtn.onClick:RemoveAllListeners()
guaranteeRewardNode.hardGuaranteeBtn.onClick:AddListener(function()
CashShopUtils.ShowWikiWeaponPreview(self.m_poolId, upWeaponId)
end)
else
guaranteeRewardNode.hardGuaranteeNode.gameObject:SetActive(false)
end
if not showHardGuarantee then
guaranteeRewardNode.loopRewardNode.gameObject:SetActive(true)
local loopRewardInfos = CashShopUtils.GetGachaWeaponLoopRewardInfo(self.m_poolId)
local loopRewardInfoCount = loopRewardInfos and #loopRewardInfos or 0
if loopRewardInfoCount > 0 then
guaranteeRewardNode.gameObject:SetActive(true)
local itemUICount = #self.m_loopRewardItemUIList
for i = 1, itemUICount do
local itemUI = self.m_loopRewardItemUIList[i]
if i > loopRewardInfoCount then
itemUI.gameObject:SetActive(false)
else
local info = loopRewardInfos[i]
itemUI.gameObject:SetActive(true)
itemUI.item:InitItem({ id = info.itemId, count = 1 }, function()
if info.isWeaponItemCase then
UIManager:Open(PanelId.BattlePassWeaponCase, { itemId = info.itemId, isPreview = true })
else
CashShopUtils.ShowWikiWeaponPreview(self.m_poolId, info.itemId)
end
end)
itemUI.pullCountTxt:SetAndResolveTextStyle(string.format(Language.LUA_GACHA_WEAPON_LOOP_REWARD_NEED_PULL_COUNT, info.remainNeedPullCount))
itemUI.nameTxt:SetAndResolveTextStyle(string.format(Language.LUA_GACHA_WEAPON_LOOP_REWARD_GET_REWARD_NAME, info.name))
local tagName
if info.isWeaponItemCase then
tagName = Language.LUA_GACHA_WEAPON_LOOP_REWARD_BOX_TAG
else
tagName = info.loopRewardTagName
end
itemUI.tagTxt.text = tagName
end
end
else
guaranteeRewardNode.gameObject:SetActive(false)
end
else
guaranteeRewardNode.loopRewardNode.gameObject:SetActive(false)
end
self:_InitRewardQueueConfigs()
end
GachaWeaponPoolCtrl._UpdateRemainingTime = HL.Method() << function(self)
local poolInfo = GameInstance.player.gacha.poolInfos:get_Item(self.m_poolId)
local endTime = poolInfo.closeTime
if endTime > 0 then
local leftTime = endTime - DateTimeUtils.GetCurrentTimestampBySeconds()
if leftTime > 3600 * 24 * 3 then
self.view.timeGreen.gameObject:SetActive(true)
self.view.timeYellow.gameObject:SetActive(false)
self.view.timeRed.gameObject:SetActive(false)
elseif leftTime <= 3600 * 24 * 3 and leftTime > 3600 * 24 then
self.view.timeGreen.gameObject:SetActive(false)
self.view.timeYellow.gameObject:SetActive(true)
self.view.timeRed.gameObject:SetActive(false)
else
self.view.timeGreen.gameObject:SetActive(false)
self.view.timeYellow.gameObject:SetActive(false)
self.view.timeRed.gameObject:SetActive(true)
end
local leftTimeStr = UIUtils.getShortLeftTime(leftTime)
self.view.timeRedText.text = leftTimeStr
self.view.timeGreenText.text = leftTimeStr
self.view.timeYellowText.text = leftTimeStr
else
self.view.timeGreen.gameObject:SetActive(false)
self.view.timeYellow.gameObject:SetActive(false)
self.view.timeRed.gameObject:SetActive(false)
end
end
GachaWeaponPoolCtrl._OnGachaBtnClick = HL.Method() << function(self)
if self.m_isRequesting or self.m_gachaWeaponGoodsCostInfo == nil then
return
end
if self.m_gachaWeaponGoodsCostInfo.ticketEnough then
GameInstance.player.shopSystem:BuyGoods(self.m_goodsData.shopId, self.m_goodsData.goodsId, 1, true)
elseif self.m_gachaWeaponGoodsCostInfo.moneyEnough then
GameInstance.player.shopSystem:BuyGoods(self.m_goodsData.shopId, self.m_goodsData.goodsId, 1)
else
return
end
self.m_isRequesting = true
end
GachaWeaponPoolCtrl.OnWalletChanged = HL.Method(HL.Opt(HL.Any)) << function(self, _)
self.m_gachaWeaponGoodsCostInfo = CashShopUtils.TryGetBuyGachaWeaponGoodsCostInfo(self.m_goodsData.shopId, self.m_goodsData.goodsId)
local costTicketId = self.m_gachaWeaponGoodsCostInfo.costTicketId
local costTicketCount = self.m_gachaWeaponGoodsCostInfo.costTicketCount
local costMoneyId = self.m_gachaWeaponGoodsCostInfo.costMoneyId
local costMoneyCount = self.m_gachaWeaponGoodsCostInfo.costMoneyCount
if self.m_gachaWeaponGoodsCostInfo.ticketEnough then
self.view.normalType.gameObject:SetActive(true)
self.view.disableType.gameObject:SetActive(false)
self.view.ticketNode.gameObject:SetActive(true)
self.view.originalCostTxt.gameObject:SetActive(true)
self.view.priceNumTxt.gameObject:SetActive(false)
self.view.normalNumTxt.text = 1
self.view.normalCostIconImg:LoadSprite(UIConst.UI_SPRITE_WALLET, costTicketId)
self.view.normalCostTxt.text = costTicketCount
self.view.normalMultiplyTxt.gameObject:SetActive(true)
self.view.gachaBtn.gameObject:SetActive(true)
self.view.noMoneyType.gameObject:SetActive(false)
elseif self.m_gachaWeaponGoodsCostInfo.moneyEnough then
self.view.normalType.gameObject:SetActive(true)
self.view.disableType.gameObject:SetActive(false)
self.view.ticketNode.gameObject:SetActive(false)
self.view.originalCostTxt.gameObject:SetActive(false)
self.view.priceNumTxt.gameObject:SetActive(true)
self.view.normalMultiplyTxt.gameObject:SetActive(false)
self.view.normalNumTxt.text = 1
self.view.normalCostIconImg:LoadSprite(UIConst.UI_SPRITE_WALLET, costMoneyId)
self.view.normalCostTxt.text = costMoneyCount
self.view.gachaBtn.gameObject:SetActive(true)
self.view.noMoneyType.gameObject:SetActive(false)
else
self.view.normalType.gameObject:SetActive(false)
self.view.disableType.gameObject:SetActive(true)
self.view.ticketNode.gameObject:SetActive(false)
self.view.originalCostTxt.gameObject:SetActive(false)
self.view.priceNumTxt.gameObject:SetActive(true)
self.view.normalMultiplyTxt.gameObject:SetActive(false)
self.view.disableNumTxt.text = 1
self.view.disableCostIconImg:LoadSprite(UIConst.UI_SPRITE_WALLET, costMoneyId)
self.view.disableCostTxt.text = costMoneyCount
self.view.gachaBtn.gameObject:SetActive(false)
self.view.noMoneyType.gameObject:SetActive(true)
self.view.noMoneyTxt.text = string.format(Language.LUA_GACHA_WEAPON_POOL_NO_MONEY, UIConst.UI_SPRITE_WALLET, costMoneyId)
end
if self.m_gachaWeaponGoodsCostInfo.ticketEnough then
self.m_moneyCellCache:Refresh(2, function(cell, tabIndex)
if tabIndex == 1 then
cell:InitMoneyCell(costTicketId)
else
cell:InitMoneyCell(Tables.globalConst.gachaWeaponItemId)
end
end)
else
self.m_moneyCellCache:Refresh(1, function(cell, tabIndex)
cell:InitMoneyCell(Tables.globalConst.gachaWeaponItemId)
end)
end
end
GachaWeaponPoolCtrl.OnGachaSucc = HL.Method(HL.Table) << function(self, arg)
self:OnWalletChanged()
local msg = unpack(arg)
if msg.GachaPoolId ~= self.m_poolId then
return
end
local weapons = {}
for k = 0, msg.FinalResults.Count - 1 do
local v = msg.FinalResults[k]
local weaponId = msg.OriResultIds[k]
local items = {}
for kk = 0, v.RewardIds.Count - 1 do
local rewardId = v.RewardIds[kk]
UIUtils.getRewardItems(rewardId, items)
end
local itemCfg = Tables.itemTable:GetValue(weaponId)
table.insert(weapons, {
weaponId = weaponId,
isNew = v.IsNew,
items = items,
rarity = itemCfg.rarity,
})
end
logger.info("OnGachaSucc", weapons)
LuaSystemManager.gachaSystem:UpdateGachaWeaponSettingState()
Notify(MessageConst.ON_DISABLE_ACHIEVEMENT_TOAST, UIConst.ACHIEVEMENT_TOAST_DISABLE_KEY.GachaWeapon)
self.m_gachaFlowCoroutine = self:_ClearCoroutine(self.m_gachaFlowCoroutine)
self.m_gachaFlowCoroutine = self:_StartCoroutine(function()
Notify(MessageConst.QUICK_HIDE_FULL_SCREEN_SCENE_BLUR)
self.view.blackMask.gameObject:SetActive(true)
coroutine.waitAsyncRequest(function(onComplete)
PhaseManager:OpenPhaseFast(PhaseId.GachaWeaponPreheat, {
weapons = weapons,
onComplete = onComplete
})
end)
coroutine.waitAsyncRequest(function(onComplete)
PhaseManager:OpenPhaseFast(PhaseId.GachaWeapon, {
weapons = weapons,
onComplete = onComplete
})
end)
table.sort(weapons, function(a, b)
if a.rarity ~= b.rarity then
return a.rarity < b.rarity
end
if a.weaponId ~= b.weaponId then
return a.weaponId < b.weaponId
end
if a.isNew == b.isNew then
return false
end
return b.isNew
end)
Notify(MessageConst.ON_ENABLE_ACHIEVEMENT_TOAST, UIConst.ACHIEVEMENT_TOAST_DISABLE_KEY.GachaWeapon)
coroutine.waitAsyncRequest(function(onComplete)
PhaseManager:OpenPhaseFast(PhaseId.GachaWeaponResult, {
weapons = weapons,
onComplete = onComplete
})
end)
self.view.blackMask.gameObject:SetActive(false)
local getItems = {}
local otherItemDict = {}
for _, weapon in ipairs(weapons) do
table.insert(getItems, { id = weapon.weaponId, count = 1 })
for _, item in ipairs(weapon.items) do
otherItemDict[item.id] = (otherItemDict[item.id] or 0) + item.count
end
end
local otherItems = {}
for k, v in pairs(otherItemDict) do
local data = Tables.itemTable[k]
table.insert(otherItems, {
id = k,
count = v,
sortId1 = data.sortId1,
sortId2 = data.sortId2,
rarity = data.rarity,
})
end
table.sort(otherItems, Utils.genSortFunction(UIConst.COMMON_ITEM_SORT_KEYS))
for _, v in ipairs(otherItems) do
table.insert(getItems, v)
end
local notifyShowRewardArg = {
queueRewardType = "GachaResultReward",
showRewardFunc = function()
Notify(MessageConst.SHOW_SYSTEM_REWARDS, {
items = getItems,
onComplete = function()
Notify(MessageConst.ON_ONE_GACHA_WEAPON_POOL_REWARD_FINISHED)
end,
})
end
}
Notify(MessageConst.GACHA_WEAPON_POOL_ADD_SHOW_REWARD, notifyShowRewardArg)
CashShopUtils.TryOpenSpecialGiftPopup()
self.m_isRequesting = false
end)
end
GachaWeaponPoolCtrl.OnGachaPoolRoleDataChanged = HL.Method() << function(self)
self:_InitData()
end
GachaWeaponPoolCtrl._ShowPerfectWeaponPreview = HL.Method(HL.String) << function(self, weaponId)
local weaponInst
if self.m_createdWeaponInsts[weaponId] ~= nil then
weaponInst = self.m_createdWeaponInsts[weaponId]
else
weaponInst = GameInstance.player.charBag:CreateClientPerfectGachaPoolWeaponWithoutGem(weaponId)
self.m_createdWeaponInsts[weaponId] = weaponInst
end
if PhaseManager:CheckCanOpenPhase(PhaseId.WeaponInfo, nil, true) == false then
return
end
if PhaseManager:CheckIsInTransition() then
return
end
local fadeTimeBoth = UIConst.CHAR_INFO_TRANSITION_BLACK_SCREEN_DURATION
local dynamicFadeData = UIUtils.genDynamicBlackScreenMaskData("GachaWeaponPool->WeaponInfo", fadeTimeBoth, fadeTimeBoth, function()
PhaseManager:OpenPhase(PhaseId.WeaponInfo, {
weaponTemplateId = weaponId,
weaponInstId = weaponInst.instId,
isFocusJump = true,
})
end)
GameAction.ShowBlackScreen(dynamicFadeData)
end
GachaWeaponPoolCtrl._ShowWikiWeaponPreview = HL.Method(HL.String) << function(self, weaponId)
local poolInfo = GameInstance.player.gacha.poolInfos:get_Item(self.m_poolId)
local poolData = poolInfo.data
local contentData = Tables.gachaWeaponPoolContentTable[self.m_poolId]
local upWeaponGroupData = {
title = Language.LUA_WEAPON_PREVIEW_UP_TITLE,
weaponIds = {}
}
for _, weaponId in pairs(poolData.upWeaponIds) do
table.insert(upWeaponGroupData.weaponIds, weaponId)
end
local possibleWeaponGroupData = {
title = Language.LUA_WEAPON_PREVIEW_POSSIBLE_TITLE,
weaponIds = {}
}
for _, v in pairs(contentData.list) do
table.insert(possibleWeaponGroupData.weaponIds, v.itemId)
end
local showWeaponPreviewArgs = {
isWeaponPreview = true,
weaponId = weaponId,
weaponGroups = {
upWeaponGroupData,
possibleWeaponGroupData
},
}
if PhaseManager:CheckCanOpenPhase(PhaseId.Wiki, nil, true) == false then
return
end
if PhaseManager:CheckIsInTransition() then
return
end
local fadeTimeBoth = UIConst.CHAR_INFO_TRANSITION_BLACK_SCREEN_DURATION
local dynamicFadeData = UIUtils.genDynamicBlackScreenMaskData("GachaWeaponPool->Wiki", fadeTimeBoth, fadeTimeBoth, function()
PhaseManager:OpenPhase(PhaseId.Wiki, showWeaponPreviewArgs)
end)
GameAction.ShowBlackScreen(dynamicFadeData)
end
GachaWeaponPoolCtrl.OnClose = HL.Override() << function(self)
self.m_createdWeaponInsts = {}
self.m_gachaFlowCoroutine = self:_ClearCoroutine(self.m_gachaFlowCoroutine)
GameInstance.player.charBag:ClearAllClientCharAndItemData()
CashShopUtils.TryFadeSpecialGiftPopup()
end
GachaWeaponPoolCtrl.m_showRewardFuncQueue = HL.Field(HL.Forward("Queue"))
GachaWeaponPoolCtrl.m_queueRewardConfigs = HL.Field(HL.Table)
GachaWeaponPoolCtrl.m_curIsShowReward = HL.Field(HL.Boolean) << false
GachaWeaponPoolCtrl._InitRewardQueueConfigs = HL.Method() << function(self)
self.m_queueRewardConfigs = {
GachaResultReward = {
order = -100,
},
LoopRewardReward = {
order = 10,
},
}
end
GachaWeaponPoolCtrl.AddQueueReward = HL.Method(HL.Table) << function(self, arg)
logger.info("GachaWeaponPoolCtrl.AddQueueReward" .. arg.queueRewardType)
self.m_showRewardFuncQueue:Push({
order = self.m_queueRewardConfigs[arg.queueRewardType].order,
showRewardFunc = arg.showRewardFunc
})
self.m_showRewardFuncQueue:Sort(function(x, y)
return x.order < y.order
end)
end
GachaWeaponPoolCtrl._TryShowQueueReward = HL.Method() << function(self)
if self.m_showRewardFuncQueue:Count() > 0 and not self.m_curIsShowReward then
self.m_curIsShowReward = true
local queueData = self.m_showRewardFuncQueue:Pop()
queueData.showRewardFunc()
end
end
GachaWeaponPoolCtrl.OnOneQueueRewardFinished = HL.Method() << function(self)
self.m_curIsShowReward = false
self:_TryShowQueueReward()
end
GachaWeaponPoolCtrl.CheckAndShowSpecialRewardPopup = HL.Method() << function(self)
local csGachaSystem = GameInstance.player.gacha
local _, poolInfo = csGachaSystem.poolInfos:TryGetValue(self.m_poolId)
if not poolInfo or poolInfo.allLoopCumulateRewardIsCheck then
return
end
local poolCfg = Tables.gachaWeaponPoolTable[self.m_poolId]
local loopRewardInfoCount = poolCfg.intervalAutoRewardIds.Count
for loopRound, isCheck in pairs(poolInfo.roleDataMsg.IntervalAutoRewardCheckMap) do
if not isCheck then
local roundRewardIndex = (loopRound - 1) % loopRewardInfoCount
local rewardId = poolCfg.intervalAutoRewardIds[roundRewardIndex]
local items = UIUtils.getRewardItems(rewardId)
local arg = {
queueRewardType = "LoopRewardReward",
showRewardFunc = function()
UIManager:AutoOpen(PanelId.GachaWeaponExtraRewardPopup, {
itemId = items[1].id,
poolId = self.m_poolId,
onComplete = function()
csGachaSystem:SendConfirmRewardReq(
self.m_poolId, CS.Proto.GACHA_CONFIRM_REWARD_TYPE.GcrtIntervalReward, { loopRound }, GEnums.GachaType.Weapon
)
Notify(MessageConst.ON_ONE_GACHA_WEAPON_POOL_REWARD_FINISHED)
end,
})
end
}
Notify(MessageConst.GACHA_WEAPON_POOL_ADD_SHOW_REWARD, arg)
end
end
end
HL.Commit(GachaWeaponPoolCtrl)