Files
Endfield-Data/LuaScripts/UI/Widgets/GachaPoolCellLimited.lua
2025-12-02 20:37:18 +07:00

225 lines
8.5 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 GachaPoolCellBase = require_ex('UI/Widgets/GachaPoolCellBase')
GachaPoolCellLimited = HL.Class('GachaPoolCellLimited', GachaPoolCellBase)
GachaPoolCellLimited._OnFirstTimeInit = HL.Override() << function(self)
GachaPoolCellLimited.Super._OnFirstTimeInit(self)
self:_InitUI()
end
GachaPoolCellLimited._InnerInitGachaPoolCell = HL.Override() << function(self)
logger.info("初始化 GachaPoolCellLimited")
end
GachaPoolCellLimited._InnerUpdateGachaPoolCell = HL.Override() << function(self)
logger.info("更新 GachaPoolCellLimited")
self:_RefreshAllUI()
end
GachaPoolCellLimited.UpdateMoneyNodeOnlyGachaTicket = HL.Override(HL.Any) << function(self, moneyNode)
moneyNode.gachaItem1.view.gameObject:SetActiveIfNecessary(true)
local singlePullItemId = Tables.charGachaConst.gachaTicketSpecialSingleItemId
moneyNode.gachaItem1:InitMoneyCell(singlePullItemId)
local poolCfg = Tables.gachaCharPoolTable[self.m_poolId]
local inventory = GameInstance.player.inventory
local valuableDepotType = GEnums.ItemValuableDepotType.CommercialItem;
local contains = inventory.valuableDepots:ContainsKey(valuableDepotType)
local depot
if contains then
depot = inventory.valuableDepots[valuableDepotType]:GetOrFallback(CS.Beyond.Gameplay.Scope.Create(GEnums.ScopeName.Main))
end
if string.isEmpty(poolCfg.ticketGachaSingleLt) then
moneyNode.gachaItem2.view.gameObject:SetActiveIfNecessary(false)
else
moneyNode.gachaItem2.view.gameObject:SetActiveIfNecessary(true)
moneyNode.gachaItem2:InitMoneyCell(poolCfg.ticketGachaSingleLt)
if depot then
for instId, itemBundle in pairs(depot.instItems) do
if itemBundle.id == poolCfg.ticketGachaSingleLt then
moneyNode.gachaItem2:SetItemInstId(instId)
end
end
end
end
if string.isEmpty(poolCfg.ticketGachaTenLt) then
moneyNode.gachaItem3.view.gameObject:SetActiveIfNecessary(false)
else
moneyNode.gachaItem3.view.gameObject:SetActiveIfNecessary(true)
moneyNode.gachaItem3:InitMoneyCell(poolCfg.ticketGachaTenLt)
if depot then
for instId, itemBundle in pairs(depot.instItems) do
if itemBundle.id == poolCfg.ticketGachaTenLt then
moneyNode.gachaItem3:SetItemInstId(instId)
end
end
end
end
end
GachaPoolCellLimited._InitUI = HL.Method() << function(self)
self.view.testimonialRewardBtn.button.onClick:AddListener(function()
local testimonialInfo = self.m_baseInfo.cumulateTestimonialInfo
local itemId = testimonialInfo.testimonialItemId
local itemName = Tables.itemTable[itemId].name
local finalDescStr = string.gsub(Language.LUA_GACHA_ITEM_INSTRUCTION_DESC_TESTIMONIAL, "%%1%$d", testimonialInfo.needPullCount, 1)
finalDescStr = string.gsub(finalDescStr, "%%2%$s", itemName, 1)
local arg = {
title = Language.LUA_GACHA_ITEM_INSTRUCTION_TITLE_TESTIMONIAL,
desc = finalDescStr,
tips = string.format(Language.LUA_GACHA_ITEM_INSTRUCTION_TIPS, testimonialInfo.remainNeedPullCount, itemName),
itemId = itemId,
}
UIManager:Open(PanelId.GachaItemInstructionPopup, arg)
end)
self.view.potentialRewardBtn.button.onClick:AddListener(function()
local loopRewardInfo = self.m_baseInfo.loopCumulateRewardInfo
local itemId = loopRewardInfo.rewardItemInfo[1].id
local itemName = Tables.itemTable[itemId].name
local finalDescStr = string.gsub(Language.LUA_GACHA_ITEM_INSTRUCTION_DESC_POTENTIAL, "%%1%$d", loopRewardInfo.needPullCount, 1)
finalDescStr = string.gsub(finalDescStr, "%%2%$s", itemName, 1)
local arg = {
title = Language.LUA_GACHA_ITEM_INSTRUCTION_TITLE_POTENTIAL,
desc = finalDescStr,
tips = string.format(Language.LUA_GACHA_ITEM_INSTRUCTION_TIPS, loopRewardInfo.remainNeedPullCount, itemName),
itemId = itemId,
}
UIManager:Open(PanelId.GachaItemInstructionPopup, arg)
end)
end
GachaPoolCellLimited._RefreshAllUI = HL.Method() << function(self)
local baseInfo = self.m_baseInfo
local testimonialInfo = baseInfo.cumulateTestimonialInfo
if string.isEmpty(testimonialInfo.testimonialItemId) then
logger.error("当前限定卡池的介绍信配置为空卡池id" .. self.m_poolId)
self.view.testimonialRewardBtn.gameObject:SetActive(false)
else
local canShowTestimonial = testimonialInfo.remainReceivedCount > 0
if canShowTestimonial then
self.view.testimonialRewardBtn.gameObject:SetActive(true)
self.view.testimonialRewardBtn.gachaItem.itemIcon:InitItemIcon(testimonialInfo.testimonialItemId)
self.view.testimonialRewardBtn.gachaItem.numText.text = 1
self.view.testimonialRewardBtn.remainNeedPullCountTxt.text = testimonialInfo.remainNeedPullCount
else
self.view.testimonialRewardBtn.gameObject:SetActive(false)
end
end
local loopRewardInfo = baseInfo.loopCumulateRewardInfo
if #loopRewardInfo.rewardItemInfo <= 0 then
logger.error("当前限定卡池的循环奖励配置为空卡池id" .. self.m_poolId)
self.view.potentialRewardBtn.gameObject:SetActive(false)
else
local canShowLoopReward = testimonialInfo.remainReceivedCount <= 0 and baseInfo.remainHardGuaranteeCount <= 0
if canShowLoopReward then
local itemInfo = loopRewardInfo.rewardItemInfo[1]
self.view.potentialRewardBtn.gameObject:SetActive(true)
self.view.potentialRewardBtn.gachaItem.itemIcon:InitItemIcon(itemInfo.id)
self.view.potentialRewardBtn.gachaItem.numText.text = itemInfo.count
self.view.potentialRewardBtn.remainPullCountTxt.text = loopRewardInfo.remainNeedPullCount
else
self.view.potentialRewardBtn.gameObject:SetActive(false)
end
end
end
GachaPoolCellLimited.CheckAndShowSpecialRewardPopup = HL.Override() << function(self)
local csGachaSystem = GameInstance.player.gacha
local baseInfo = self.m_baseInfo
local testimonialInfo = baseInfo.cumulateTestimonialInfo
if not testimonialInfo.isCheck then
local itemId = testimonialInfo.testimonialItemId
local arg = {
queueRewardType = "TestimonialReward",
showRewardFunc = function()
UIManager:AutoOpen(PanelId.GachaImportantRewardPopup, {
itemId = itemId,
onComplete = function()
csGachaSystem:SendConfirmRewardReq(self.m_poolId, CS.Proto.GACHA_CONFIRM_REWARD_TYPE.GcrtOnceReward, {
CS.Proto.CHAR_GACHA_ONCE_AUTO_REWARD_INDEX.CgoarIndexTestimonial:GetHashCode()
})
Notify(MessageConst.ON_ONE_GACHA_POOL_REWARD_FINISHED)
end,
})
end
}
Notify(MessageConst.GACHA_POOL_ADD_SHOW_REWARD, arg)
end
local loopRewardInfo = baseInfo.loopCumulateRewardInfo
if not loopRewardInfo.allIsCheck then
local succ, poolData = csGachaSystem.poolInfos:TryGetValue(self.m_poolId)
if succ then
local poolCfg = Tables.gachaCharPoolTable[self.m_poolId]
for loopRound, isCheck in pairs(poolData.roleDataMsg.IntervalAutoRewardCheckMap) do
if not isCheck then
local arg = {
queueRewardType = "PotentialReward",
showRewardFunc = function()
UIManager:AutoOpen(PanelId.GachaPotentialPopup, {
charId = poolCfg.upCharIds[0],
potentialItemId = loopRewardInfo.rewardItemInfo[1].id,
onComplete = function()
csGachaSystem:SendConfirmRewardReq(self.m_poolId, CS.Proto.GACHA_CONFIRM_REWARD_TYPE.GcrtIntervalReward, {
loopRound
})
Notify(MessageConst.ON_ONE_GACHA_POOL_REWARD_FINISHED)
end,
})
end
}
Notify(MessageConst.GACHA_POOL_ADD_SHOW_REWARD, arg)
end
end
end
end
end
HL.Commit(GachaPoolCellLimited)
return GachaPoolCellLimited