80af235e05
EN: 1.12.0.120 CN: 1.12.0.120 JP: 1.12.0.124 KR: 1.12.0.124
258 lines
9.0 KiB
Lua
258 lines
9.0 KiB
Lua
local MallPackageDetailCtrl = class("MallPackageDetailCtrl", BaseCtrl)
|
|
MallPackageDetailCtrl._mapNodeConfig = {
|
|
txtWindowTitle = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Shop_TitleBuy"
|
|
},
|
|
txtName = {sComponentName = "TMP_Text"},
|
|
imgDetailIcon = {sComponentName = "Image"},
|
|
goCurrency = {},
|
|
imgCurrency = {sComponentName = "Image"},
|
|
txtPrice = {sComponentName = "TMP_Text"},
|
|
txtPriceCn = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Mall_Package_PriceTitle"
|
|
},
|
|
goTime = {},
|
|
txtLimit = {sComponentName = "TMP_Text"},
|
|
txtLimitCn = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Mall_Package_LimitTitle"
|
|
},
|
|
txtTime = {sComponentName = "TMP_Text"},
|
|
txtTimeCn = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Mall_Package_TimeTitle"
|
|
},
|
|
txtTitleDetail = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Mall_Package_Detail"
|
|
},
|
|
btnBuy1 = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_Buy"
|
|
},
|
|
btnBuy2 = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_Disable"
|
|
},
|
|
btnAll = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_All"
|
|
},
|
|
txtBtnBuy = {
|
|
nCount = 2,
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Mall_Btn_Buy"
|
|
},
|
|
txtBtnAll = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Mall_Btn_All"
|
|
},
|
|
goShow = {
|
|
nCount = 5,
|
|
sCtrlName = "Game.UI.TemplateEx.TemplateItemCtrl"
|
|
},
|
|
btnShow = {
|
|
nCount = 5,
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_Tips"
|
|
},
|
|
btnClose = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_Close"
|
|
},
|
|
txtDisable = {sComponentName = "TMP_Text"}
|
|
}
|
|
MallPackageDetailCtrl._mapEventConfig = {}
|
|
function MallPackageDetailCtrl:Refresh(mapData)
|
|
self.sId = mapData.sId
|
|
local mapCfg = ConfigTable.GetData("MallPackage", mapData.sId)
|
|
self:PlayInAni()
|
|
self:RefreshInfo(mapCfg)
|
|
self:RefreshPrice(mapCfg)
|
|
self:RefreshLimit(mapCfg, mapData)
|
|
self:RefreshTime(mapData)
|
|
self:RefreshItem(mapCfg)
|
|
self:RefreshBuy(mapCfg, mapData)
|
|
end
|
|
function MallPackageDetailCtrl:RefreshInfo(mapCfg)
|
|
NovaAPI.SetTMPText(self._mapNode.txtName, mapCfg.DetailName)
|
|
self:SetPngSprite(self._mapNode.imgDetailIcon, mapCfg.Icon)
|
|
end
|
|
function MallPackageDetailCtrl:RefreshPrice(mapCfg)
|
|
if mapCfg.CurrencyType == GameEnum.currencyType.Cash then
|
|
self._mapNode.goCurrency:SetActive(false)
|
|
NovaAPI.SetTMPText(self._mapNode.txtPrice, tostring(mapCfg.CurrencyShowPrice))
|
|
elseif mapCfg.CurrencyType == GameEnum.currencyType.Item then
|
|
self._mapNode.goCurrency:SetActive(true)
|
|
NovaAPI.SetTMPText(self._mapNode.txtPrice, mapCfg.CurrencyItemQty)
|
|
self:SetPngSprite(self._mapNode.imgCurrency, ConfigTable.GetData_Item(mapCfg.CurrencyItemId).Icon2)
|
|
elseif mapCfg.CurrencyType == GameEnum.currencyType.Free then
|
|
self._mapNode.goCurrency:SetActive(false)
|
|
NovaAPI.SetTMPText(self._mapNode.txtPrice, ConfigTable.GetUIText("Mall_Package_Free"))
|
|
end
|
|
end
|
|
function MallPackageDetailCtrl:RefreshLimit(mapCfg, mapData)
|
|
NovaAPI.SetTMPText(self._mapNode.txtLimit, mapData.nCurStock .. "/" .. mapCfg.Stock)
|
|
if mapCfg.RefreshType == GameEnum.mallPackageRefreshType.None then
|
|
NovaAPI.SetTMPText(self._mapNode.txtLimitCn, ConfigTable.GetUIText("Mall_Package_LimitTitle"))
|
|
elseif mapCfg.RefreshType == GameEnum.mallPackageRefreshType.Day then
|
|
NovaAPI.SetTMPText(self._mapNode.txtLimitCn, ConfigTable.GetUIText("Mall_Package_DayLimitTitle"))
|
|
elseif mapCfg.RefreshType == GameEnum.mallPackageRefreshType.Week then
|
|
NovaAPI.SetTMPText(self._mapNode.txtLimitCn, ConfigTable.GetUIText("Mall_Package_WeekLimitTitle"))
|
|
elseif mapCfg.RefreshType == GameEnum.mallPackageRefreshType.Month then
|
|
NovaAPI.SetTMPText(self._mapNode.txtLimitCn, ConfigTable.GetUIText("Mall_Package_MonthLimitTitle"))
|
|
end
|
|
end
|
|
function MallPackageDetailCtrl:RefreshTime(mapData)
|
|
self._mapNode.goTime:SetActive(mapData.nNextRefreshTime > 0)
|
|
if mapData.nNextRefreshTime > 0 then
|
|
local sSuffix = mapData.bPrioritizeDeList and ConfigTable.GetUIText("Mall_Package_Delist") or ConfigTable.GetUIText("Mall_Package_Refresh")
|
|
local sPrefix
|
|
local nRemaining = mapData.nNextRefreshTime - CS.ClientManager.Instance.serverTimeStamp
|
|
if nRemaining <= 3600 then
|
|
sPrefix = ConfigTable.GetUIText("Mall_Package_WithinHour")
|
|
elseif 3600 < nRemaining and nRemaining <= 86400 then
|
|
sPrefix = orderedFormat(ConfigTable.GetUIText("Mall_Package_Hour") or "", math.floor(nRemaining / 3600))
|
|
elseif 86400 < nRemaining then
|
|
sPrefix = orderedFormat(ConfigTable.GetUIText("Mall_Package_Day") or "", math.floor(nRemaining / 86400))
|
|
end
|
|
NovaAPI.SetTMPText(self._mapNode.txtTime, sPrefix .. sSuffix)
|
|
end
|
|
end
|
|
function MallPackageDetailCtrl:RefreshItem(mapCfg)
|
|
local tbItem = decodeJson(mapCfg.Items)
|
|
self.tbShow = {}
|
|
for k, v in pairs(tbItem) do
|
|
local nId = tonumber(k)
|
|
table.insert(self.tbShow, {
|
|
nId = nId,
|
|
nCount = v,
|
|
nRarity = ConfigTable.GetData_Item(nId).Rarity
|
|
})
|
|
end
|
|
table.sort(self.tbShow, function(a, b)
|
|
if a.nRarity ~= b.nRarity then
|
|
return a.nRarity < b.nRarity
|
|
else
|
|
return a.nId < b.nId
|
|
end
|
|
end)
|
|
local nItemCount = #self.tbShow
|
|
self._mapNode.btnAll.gameObject:SetActive(5 < nItemCount)
|
|
for i = 1, 5 do
|
|
if i <= nItemCount then
|
|
self._mapNode.goShow[i]:SetItem(self.tbShow[i].nId, nil, self.tbShow[i].nCount, nil, nil, nil, nil, true)
|
|
else
|
|
self._mapNode.goShow[i]:SetItem()
|
|
end
|
|
self._mapNode.btnShow[i].interactable = i <= nItemCount
|
|
end
|
|
end
|
|
function MallPackageDetailCtrl:RefreshBuy(mapCfg, mapData)
|
|
local tbCond = decodeJson(mapCfg.OrderCondParams)
|
|
local bPurchaseAble = PlayerData.Shop:CheckShopCond(mapCfg.OrderCondType, tbCond)
|
|
local bAble = bPurchaseAble and mapData.nCurStock > 0
|
|
self._mapNode.btnBuy1.gameObject:SetActive(bAble)
|
|
self._mapNode.btnBuy2.gameObject:SetActive(not bAble)
|
|
self._mapNode.txtDisable.gameObject:SetActive(not bAble)
|
|
local sDisable
|
|
if not bPurchaseAble then
|
|
if mapCfg.OrderCondType == GameEnum.shopCond.WorldClassSpecific then
|
|
sDisable = orderedFormat(ConfigTable.GetUIText("Shop_Cond_WorldClassShort") or "", tbCond[1])
|
|
end
|
|
self.sDisableTip = ConfigTable.GetUIText("Shop_Condition")
|
|
elseif mapData.nCurStock == 0 then
|
|
sDisable = ConfigTable.GetUIText("Shop_Cond_SoldOutShort")
|
|
self.sDisableTip = ConfigTable.GetUIText("Shop_GoodsEmpty")
|
|
end
|
|
NovaAPI.SetTMPText(self._mapNode.txtDisable, sDisable)
|
|
end
|
|
function MallPackageDetailCtrl:PlayInAni()
|
|
self.gameObject:SetActive(true)
|
|
self.ani:Play("t_window_04_t_in")
|
|
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
|
|
end
|
|
function MallPackageDetailCtrl:PlayOutAni()
|
|
self.ani:Play("t_window_04_t_out")
|
|
self:AddTimer(1, 0.2, "Close", true, true, true)
|
|
end
|
|
function MallPackageDetailCtrl:Close()
|
|
self.gameObject:SetActive(false)
|
|
end
|
|
function MallPackageDetailCtrl:Awake()
|
|
self.ani = self.gameObject.transform:GetComponent("Animator")
|
|
end
|
|
function MallPackageDetailCtrl:OnEnable()
|
|
end
|
|
function MallPackageDetailCtrl:OnDisable()
|
|
end
|
|
function MallPackageDetailCtrl:OnDestroy()
|
|
end
|
|
function MallPackageDetailCtrl:OnBtnClick_Buy()
|
|
local mapCfg = ConfigTable.GetData("MallPackage", self.sId)
|
|
if not mapCfg then
|
|
return
|
|
end
|
|
local nCurrencyType = mapCfg.CurrencyType
|
|
if nCurrencyType == GameEnum.currencyType.Cash then
|
|
PlayerData.Mall:BuyPackage(self.sId, mapCfg.StatisticalGroup)
|
|
else
|
|
local bShowConfirm = false
|
|
if nCurrencyType == GameEnum.currencyType.Item then
|
|
local nHas = 0
|
|
if mapCfg.CurrencyItemId == AllEnum.CoinItemId.FREESTONE or mapCfg.CurrencyItemId == AllEnum.CoinItemId.STONE then
|
|
bShowConfirm = true
|
|
nHas = PlayerData.Coin:GetCoinCount(AllEnum.CoinItemId.FREESTONE) + PlayerData.Coin:GetCoinCount(AllEnum.CoinItemId.STONE)
|
|
else
|
|
nHas = PlayerData.Coin:GetCoinCount(mapCfg.CurrencyItemId)
|
|
end
|
|
if nHas < mapCfg.CurrencyItemQty then
|
|
local msg = {
|
|
nType = AllEnum.MessageBox.Confirm,
|
|
sContent = orderedFormat(ConfigTable.GetUIText("Recruit_Charge") or "", ConfigTable.GetData_Item(AllEnum.CoinItemId.STONE).Id),
|
|
callbackConfirm = function()
|
|
EventManager.Hit("MallCloseDetail")
|
|
EventManager.Hit("OpenMallTog", AllEnum.MallToggle.Gem)
|
|
end,
|
|
bBlur = false
|
|
}
|
|
EventManager.Hit(EventId.OpenMessageBox, msg)
|
|
return
|
|
end
|
|
end
|
|
if bShowConfirm then
|
|
local msg = {
|
|
nType = AllEnum.MessageBox.Confirm,
|
|
sContent = orderedFormat(ConfigTable.GetUIText("Mall_Package_Buy_Confirm") or "", mapCfg.CurrencyItemQty, mapCfg.CurrencyItemId, mapCfg.DetailName),
|
|
callbackConfirm = function()
|
|
PlayerData.Mall:SendMallPackageOrderReq(self.sId)
|
|
end,
|
|
bBlur = false
|
|
}
|
|
EventManager.Hit(EventId.OpenMessageBox, msg)
|
|
else
|
|
PlayerData.Mall:SendMallPackageOrderReq(self.sId)
|
|
end
|
|
end
|
|
end
|
|
function MallPackageDetailCtrl:OnBtnClick_Disable()
|
|
EventManager.Hit(EventId.OpenMessageBox, self.sDisableTip)
|
|
end
|
|
function MallPackageDetailCtrl:OnBtnClick_All()
|
|
local msg = {
|
|
nType = AllEnum.MessageBox.ItemList,
|
|
tbItem = self.tbShow,
|
|
bBlur = false
|
|
}
|
|
EventManager.Hit(EventId.OpenMessageBox, msg)
|
|
end
|
|
function MallPackageDetailCtrl:OnBtnClick_Close()
|
|
EventManager.Hit("MallCloseDetail")
|
|
end
|
|
function MallPackageDetailCtrl:OnBtnClick_Tips(btn, nIndex)
|
|
UTILS.ClickItemGridWithTips(self.tbShow[nIndex].nId, btn.transform, true, true, false)
|
|
end
|
|
return MallPackageDetailCtrl
|