Files
StellaSora_DataLua/lua/game/ui/battlepass/battlepassbuylevelctrl.lua
T
SL1900 e0549005e1 Update - 1.9.0.103
EN: 1.9.0.103
CN: 1.9.0.104
JP: 1.9.0.106
KR: 1.9.0.108
2026-04-18 00:15:00 +09:00

234 lines
8.1 KiB
Lua

local BattlePassBuyLevelCtrl = class("BattlePassBuyLevelCtrl", BaseCtrl)
BattlePassBuyLevelCtrl._mapNodeConfig = {
TMPHintLevelBuy = {sComponentName = "TMP_Text"},
TMP_costCount = {sComponentName = "TMP_Text"},
TMPBuyLevel = {sComponentName = "TMP_Text"},
TMPLevelTitle = {
sComponentName = "TMP_Text",
sLanguageId = "BattlePassLevelBuyTitle"
},
goQuantitySelector = {
sNodeName = "tc_quantity_selector",
sCtrlName = "Game.UI.TemplateEx.TemplateQuantitySelectorCtrl"
},
imgCostIcon = {sComponentName = "Image"},
srItemList = {
sComponentName = "LoopScrollView"
},
btnConfirm1 = {
sComponentName = "UIButton",
callback = "OnBtnClick_Buy"
},
btnCancel = {sComponentName = "UIButton", callback = "ClosePanel"},
btnClose = {sComponentName = "UIButton", callback = "ClosePanel"},
BtnCloseScreen = {sComponentName = "UIButton", callback = "ClosePanel"},
txtTitleBuyLevel2 = {
sComponentName = "TMP_Text",
sLanguageId = "BattlePassLevelBuy"
},
txtStock = {
sComponentName = "TMP_Text",
sLanguageId = "BattlePassLevelBuy"
},
TMP_costTitle = {
sComponentName = "TMP_Text",
sLanguageId = "BattlePassLevelBuyCost"
},
txtBtnConfirm = {
sComponentName = "TMP_Text",
sLanguageId = "BattlePassLevelBuyConfirm"
},
txtBtnCancel = {
sComponentName = "TMP_Text",
sLanguageId = "BattlePassLevelBuyCancel"
},
AnimRoot = {
sNodeName = "t_window_04",
sComponentName = "Animator"
}
}
BattlePassBuyLevelCtrl._mapEventConfig = {}
BattlePassBuyLevelCtrl._mapRedDotConfig = {}
function BattlePassBuyLevelCtrl:Awake()
self._mapGridCtrl = {}
self.upgradeCostId = ConfigTable.GetData("BattlePassLevel", 1).Tid
self:SetSprite_Coin(self._mapNode.imgCostIcon, self.upgradeCostId)
end
function BattlePassBuyLevelCtrl:FadeIn()
end
function BattlePassBuyLevelCtrl:FadeOut()
end
function BattlePassBuyLevelCtrl:OnEnable()
self.gameObject:SetActive(false)
end
function BattlePassBuyLevelCtrl:OnDisable()
self:UnbindAllCtrl()
end
function BattlePassBuyLevelCtrl:OnDestroy()
end
function BattlePassBuyLevelCtrl:OnRelease()
end
function BattlePassBuyLevelCtrl:UnbindAllCtrl()
for _, mapCtrl in pairs(self._mapGridCtrl) do
self:UnbindCtrlByNode(mapCtrl)
end
self._mapGridCtrl = {}
end
function BattlePassBuyLevelCtrl:ClosePanel()
local waitCallback = function()
self:UnbindAllCtrl()
self.gameObject:SetActive(false)
end
self._mapNode.AnimRoot:Play("t_window_04_t_out")
self:AddTimer(1, 0.2, waitCallback, true, true, true, nil)
end
function BattlePassBuyLevelCtrl:ShowPanel(nCurLevel, tbReward, nSeasonId, bPremium)
self.gameObject:SetActive(true)
self._mapNode.TMPHintLevelBuy.gameObject:SetActive(false)
self._mapNode.srItemList.gameObject:SetActive(false)
self.curAddLevel = 1
self.curCost = 0
self.tbReward = tbReward
self.curLevel = nCurLevel
self.bPremium = bPremium
self.rewards = {}
self._mapNode.srItemList:SetAnim(0.08)
self:RefreshAddCount()
local callback = function(nCount)
self.curAddLevel = nCount
self:RefreshAddCount()
end
local nMaxLevel = #self.tbReward
self._mapNode.goQuantitySelector:Init(callback, 1, nMaxLevel - nCurLevel)
self._mapNode.AnimRoot:Play("t_window_04_t_in")
end
function BattlePassBuyLevelCtrl:OnGridRefresh(goGrid, gridIndex)
if self._mapGridCtrl[goGrid] == nil then
local mapCtrl = self:BindCtrlByNode(goGrid, "Game.UI.BattlePass.BattlePassBuyLevelItemGridCtrl")
self._mapGridCtrl[goGrid] = mapCtrl
end
local nIdx = gridIndex
if nIdx == nil then
return
end
nIdx = nIdx + 1
self._mapGridCtrl[goGrid]:Refresh(self.rewards[nIdx][1], self.rewards[nIdx][2])
end
function BattlePassBuyLevelCtrl:RefreshAddCount()
local mapReward = {}
self.curCost = 0
for i = self.curLevel + 1, self.curLevel + self.curAddLevel do
local mapRewardData = self.tbReward[i]
if mapRewardData ~= nil then
local mapLevel = ConfigTable.GetData("BattlePassLevel", i)
if mapLevel == nil then
return
end
self.curCost = self.curCost + mapLevel.Qty
if 0 < mapRewardData.nNormalTid then
if mapReward[mapRewardData.nNormalTid] == nil then
mapReward[mapRewardData.nNormalTid] = 0
end
mapReward[mapRewardData.nNormalTid] = mapReward[mapRewardData.nNormalTid] + mapRewardData.nNormalQty
end
if self.bPremium then
if 0 < mapRewardData.nVipTid1 then
if mapReward[mapRewardData.nVipTid1] == nil then
mapReward[mapRewardData.nVipTid1] = 0
end
mapReward[mapRewardData.nVipTid1] = mapReward[mapRewardData.nVipTid1] + mapRewardData.nVipQty1
end
if 0 < mapRewardData.nVipTid2 then
if mapReward[mapRewardData.nVipTid2] == nil then
mapReward[mapRewardData.nVipTid2] = 0
end
mapReward[mapRewardData.nVipTid2] = mapReward[mapRewardData.nVipTid2] + mapRewardData.nVipQty2
end
end
end
end
NovaAPI.SetTMPText(self._mapNode.TMP_costCount, self.curCost)
local nDefaultCount = PlayerData.Item:GetItemCountByID(self.upgradeCostId)
if nDefaultCount < self.curCost then
NovaAPI.SetTMPColor(self._mapNode.TMP_costCount, Red_Unable)
else
NovaAPI.SetTMPColor(self._mapNode.TMP_costCount, Blue_Normal)
end
self.rewards = {}
for nTid, nCount in pairs(mapReward) do
table.insert(self.rewards, {nTid, nCount})
end
if 0 < #self.rewards then
self._mapNode.srItemList.gameObject:SetActive(true)
self._mapNode.srItemList:Init(#self.rewards, self, self.OnGridRefresh, nil, true, nil)
self._mapNode.TMPHintLevelBuy.gameObject:SetActive(true)
NovaAPI.SetTMPText(self._mapNode.TMPHintLevelBuy, orderedFormat(ConfigTable.GetUIText("BattlePassLevelBuyInfo") or "", self.curLevel + self.curAddLevel))
NovaAPI.SetTMPText(self._mapNode.TMPBuyLevel, self.curAddLevel)
else
self._mapNode.TMPHintLevelBuy.gameObject:SetActive(false)
self._mapNode.srItemList.gameObject:SetActive(false)
end
end
function BattlePassBuyLevelCtrl:OnBtnClick_Buy()
self:BuyOrExchangeCoin()
end
function BattlePassBuyLevelCtrl:BuyOrExchangeCoin()
local ConfirmPanel = function(sTip, confirmCallback)
local msg = {
nType = AllEnum.MessageBox.Confirm,
sContent = sTip,
callbackConfirm = confirmCallback,
callbackCancel = nil,
bBlur = false
}
EventManager.Hit(EventId.OpenMessageBox, msg)
end
local mapCostCfgData = ConfigTable.GetData_Item(AllEnum.CoinItemId.STONE)
local mapJadeCfgData = ConfigTable.GetData_Item(AllEnum.CoinItemId.Jade)
if mapJadeCfgData == nil then
return
end
if mapCostCfgData == nil then
return
end
local BuyCallback = function(mapData)
self:ClosePanel()
end
local nDefaultCount = PlayerData.Item:GetItemCountByID(self.upgradeCostId)
if nDefaultCount >= self.curCost then
local confirmCallback = function()
PlayerData.BattlePass:NetMsg_BuyBattlePassLevel(self.curAddLevel, BuyCallback)
end
local sTips = orderedFormat(ConfigTable.GetUIText("Shop_BuyComfirm") or "", self.curCost, mapJadeCfgData.Title, ConfigTable.GetUIText("BattlePassLevelTitle"))
ConfirmPanel(sTips, confirmCallback)
elseif self.upgradeCostId == AllEnum.CoinItemId.Jade then
local nNeedCount = self.curCost - nDefaultCount
local sTips1 = orderedFormat(ConfigTable.GetUIText("Recruit_ExchangeGemZero") or "", mapJadeCfgData.Id, nNeedCount, mapCostCfgData.Id)
local confirmCallbackStone = function()
local nCurStoneCount = PlayerData.Item:GetItemCountByID(AllEnum.CoinItemId.STONE)
nCurStoneCount = nCurStoneCount + PlayerData.Item:GetItemCountByID(AllEnum.CoinItemId.FREESTONE)
if nCurStoneCount >= nNeedCount then
local convertCallback = function()
local nDefaultCountAfter = PlayerData.Item:GetItemCountByID(self.upgradeCostId)
if nDefaultCountAfter < self.curCost then
NovaAPI.SetTMPColor(self._mapNode.TMP_costCount, Red_Unable)
else
NovaAPI.SetTMPColor(self._mapNode.TMP_costCount, Blue_Normal)
end
end
PlayerData.Coin:SendGemConvertReqReq(nNeedCount, convertCallback)
else
local sTips2 = orderedFormat(ConfigTable.GetUIText("Recruit_Charge") or "", mapCostCfgData.Id)
local confirmCallbackExchange = function()
EventManager.Hit(EventId.OpenPanel, PanelId.Mall, AllEnum.MallToggle.Gem)
end
ConfirmPanel(sTips2, confirmCallbackExchange)
end
end
ConfirmPanel(sTips1, confirmCallbackStone)
else
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("NotEnoughItem"))
end
end
return BattlePassBuyLevelCtrl