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)