Files
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

472 lines
18 KiB
Lua

local EquipmentUpgradeCtrl = class("EquipmentUpgradeCtrl", BaseCtrl)
local WwiseAudioMgr = CS.WwiseAudioManager.Instance
EquipmentUpgradeCtrl._mapNodeConfig = {
TopBar = {
sNodeName = "TopBarPanel",
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
},
blur = {
sNodeName = "t_fullscreen_blur_blue"
},
aniBlur = {
sNodeName = "t_fullscreen_blur_blue",
sComponentName = "Animator"
},
btnCloseBg = {
sNodeName = "snapshot1",
sComponentName = "Button",
callback = "OnBtnClick_Close"
},
txtWindowTitle = {
sComponentName = "TMP_Text",
sLanguageId = "Equipment_Upgrade_WindowTitle"
},
window = {},
aniWindow = {sNodeName = "window", sComponentName = "Animator"},
btnClose = {
sComponentName = "UIButton",
callback = "OnBtnClick_Close"
},
txtEquipmentName = {sComponentName = "TMP_Text"},
btnProperty = {
nCount = 4,
sComponentName = "UIButton",
callback = "OnBtnClick_Property"
},
goProperty = {
nCount = 4,
sCtrlName = "Game.UI.TemplateEx.TemplateRandomPropertyCtrl"
},
imgOff = {nCount = 4},
imgOn = {nCount = 4},
imgMax = {nCount = 4},
txtTitleMat = {sComponentName = "TMP_Text"},
goTip = {},
goRevert = {},
goUpgrade = {},
goPropertyRevert = {
sCtrlName = "Game.UI.TemplateEx.TemplateRandomPropertyCtrl"
},
txtUpgradeTip = {nCount = 2, sComponentName = "TMP_Text"},
goMat = {
nCount = 2,
sCtrlName = "Game.UI.TemplateEx.TemplateMatCtrl"
},
btnMat = {
nCount = 2,
sComponentName = "UIButton",
callback = "OnBtnClick_MatTip"
},
btnUpgrade = {
sComponentName = "UIButton",
callback = "OnBtnClick_Upgrade"
},
btnRevert = {
sComponentName = "UIButton",
callback = "OnBtnClick_Revert"
},
txtBtnUpgrade = {
sComponentName = "TMP_Text",
sLanguageId = "Equipment_Btn_Upgrade"
},
txtBtnRevert = {
sComponentName = "TMP_Text",
sLanguageId = "Equipment_Btn_Revert"
},
imgCostIcon = {sComponentName = "Image"},
txtCostCount = {sComponentName = "TMP_Text"},
goCostCoin = {},
goMaxUpgrade = {},
animPopUpBlur = {
sNodeName = "goMaxUpgradeBlur",
sComponentName = "Animator"
},
animPopUpWindow = {
sNodeName = "goMaxUpgradeWindow",
sComponentName = "Animator"
},
txtPopUpTitle = {
sComponentName = "TMP_Text",
sLanguageId = "MessageBox_Title"
},
txtMaxUpgradeTip = {
sComponentName = "TMP_Text",
sLanguageId = "Equipment_Upgrade_MaxUpgradeTip"
},
goPropertyPopUp = {
nCount = 2,
sCtrlName = "Game.UI.TemplateEx.TemplateRandomPropertyCtrl"
},
btnOK = {sComponentName = "UIButton"},
txtBtnOK = {sComponentName = "TMP_Text", sLanguageId = "BtnConfirm"},
btnNG = {sComponentName = "UIButton"},
txtBtnNG = {sComponentName = "TMP_Text", sLanguageId = "BtnCancel"},
btnPopUpClose = {sComponentName = "UIButton", callback = "ClosePopUp"},
btnPopUpCloseBig = {sComponentName = "UIButton", callback = "ClosePopUp"}
}
EquipmentUpgradeCtrl._mapEventConfig = {}
function EquipmentUpgradeCtrl:Open()
self._mapNode.blur:SetActive(true)
self:PlayInAni()
self:Refresh()
end
function EquipmentUpgradeCtrl:Refresh()
self:RefreshData()
self:RefreshProperty()
self:RefreshInfo()
self:RefreshDesc()
end
function EquipmentUpgradeCtrl:RefreshData()
local nGemId = PlayerData.Equipment:GetGemIdBySlot(self.nCharId, self.nSlotId)
self.mapGemCfg = ConfigTable.GetData("CharGem", nGemId)
self.mapSlotCfg = ConfigTable.GetData("CharGemSlotControl", self.nSlotId)
local tbEquipment = PlayerData.Equipment:GetEquipmentBySlot(self.nCharId, self.nSlotId)
self.mapEquipment = tbEquipment[self.nSelectGemIndex]
end
function EquipmentUpgradeCtrl:RefreshInfo()
local sRoman = ConfigTable.GetUIText("RomanNumeral_" .. self.nSelectGemIndex)
local sSuf = orderedFormat(ConfigTable.GetUIText("Equipment_NameIndexSuffix"), sRoman)
NovaAPI.SetTMPText(self._mapNode.txtEquipmentName, self.mapGemCfg.Title .. sSuf)
end
function EquipmentUpgradeCtrl:RefreshProperty()
for i = 1, 4 do
if self.nSelectUpgradeIndex == i then
local bSelectChanged = false
local nId = self.mapEquipment.tbAffix[self.nSelectUpgradeIndex]
local mapCfg = ConfigTable.GetData("CharGemAttrValue", nId)
if mapCfg then
local nLeft = mapCfg.OverlockCount - self.mapEquipment.tbUpgradeCount[self.nSelectUpgradeIndex]
if 0 < nLeft then
bSelectChanged = true
end
end
if bSelectChanged then
self._mapNode.goProperty[i]:SetProperty(self.mapEquipment.tbAffix[i], self.nCharId, false, self.mapEquipment.tbUpgradeCount[i] + 1)
else
self._mapNode.goProperty[i]:SetProperty(self.mapEquipment.tbAffix[i], self.nCharId, false, self.mapEquipment.tbUpgradeCount[i])
end
else
self._mapNode.goProperty[i]:SetProperty(self.mapEquipment.tbAffix[i], self.nCharId, false, self.mapEquipment.tbUpgradeCount[i])
end
self._mapNode.imgMax[i]:SetActive(false)
self._mapNode.imgOff[i]:SetActive(self.nSelectUpgradeIndex ~= i)
self._mapNode.imgOn[i]:SetActive(self.nSelectUpgradeIndex == i)
end
end
function EquipmentUpgradeCtrl:RefreshDesc()
self._mapNode.goRevert:SetActive(false)
self._mapNode.goUpgrade:SetActive(false)
self._mapNode.goTip:SetActive(false)
self._mapNode.goCostCoin:SetActive(false)
local nUpgradeCount = self.mapEquipment:GetUpgradeCount()
local nLimit = ConfigTable.GetConfigNumber("CharGemOverlockCount")
local bAble = nUpgradeCount < nLimit
if bAble then
if self.nSelectUpgradeIndex == 0 then
self._mapNode.goTip:SetActive(true)
NovaAPI.SetTMPText(self._mapNode.txtUpgradeTip[1], orderedFormat(ConfigTable.GetUIText("Equipment_Upgrade_NeedSelect"), nLimit - nUpgradeCount))
NovaAPI.SetTMPText(self._mapNode.txtTitleMat, ConfigTable.GetUIText("Equipment_Upgrade_OptionTitle"))
elseif self.nSelectUpgradeIndex ~= 0 then
local nId = self.mapEquipment.tbAffix[self.nSelectUpgradeIndex]
local mapCfg = ConfigTable.GetData("CharGemAttrValue", nId)
if mapCfg then
local nLeft = mapCfg.OverlockCount - self.mapEquipment.tbUpgradeCount[self.nSelectUpgradeIndex]
if 0 < nLeft then
self._mapNode.goUpgrade:SetActive(true)
self._mapNode.goMat[1]:SetMat(self.mapGemCfg.OverlockCostTid, self.mapSlotCfg.OverlockCostQty)
self._mapNode.goMat[2]:SetMat(AllEnum.CoinItemId.Gold, self.mapSlotCfg.OverlockDoraCostQty)
self:RefreshCoin()
NovaAPI.SetTMPText(self._mapNode.txtTitleMat, ConfigTable.GetUIText("Equipment_Upgrade_CostTitle"))
else
self._mapNode.goTip:SetActive(true)
NovaAPI.SetTMPText(self._mapNode.txtUpgradeTip[1], ConfigTable.GetUIText("Equipment_Upgrade_MaxLevel"))
NovaAPI.SetTMPText(self._mapNode.txtTitleMat, ConfigTable.GetUIText("Equipment_Upgrade_OptionTitle"))
end
end
end
elseif self.nSelectUpgradeIndex == 0 then
self._mapNode.goTip:SetActive(true)
NovaAPI.SetTMPText(self._mapNode.txtUpgradeTip[1], orderedFormat(ConfigTable.GetUIText("Equipment_Upgrade_NeedSelect"), nLimit - nUpgradeCount))
NovaAPI.SetTMPText(self._mapNode.txtTitleMat, ConfigTable.GetUIText("Equipment_Upgrade_OptionTitle"))
elseif self.nSelectUpgradeIndex ~= 0 then
if 0 < self.mapEquipment.tbUpgradeCount[self.nSelectUpgradeIndex] then
self._mapNode.goRevert:SetActive(true)
self._mapNode.goPropertyRevert:SetProperty(self.mapEquipment.tbAffix[self.nSelectUpgradeIndex], self.nCharId, false, self.mapEquipment.tbUpgradeCount[self.nSelectUpgradeIndex] - 1)
NovaAPI.SetTMPText(self._mapNode.txtUpgradeTip[2], orderedFormat(ConfigTable.GetUIText("Equipment_Upgrade_RevertDesc"), nLimit - nUpgradeCount + 1))
NovaAPI.SetTMPText(self._mapNode.txtTitleMat, ConfigTable.GetUIText("Equipment_Upgrade_RevertTitle"))
else
self._mapNode.goTip:SetActive(true)
NovaAPI.SetTMPText(self._mapNode.txtUpgradeTip[1], ConfigTable.GetUIText("Equipment_Upgrade_MaxLimit"))
NovaAPI.SetTMPText(self._mapNode.txtTitleMat, ConfigTable.GetUIText("Equipment_Upgrade_OptionTitle"))
end
end
end
function EquipmentUpgradeCtrl:RefreshCoin()
self._mapNode.goCostCoin:SetActive(true)
self:SetSprite_Coin(self._mapNode.imgCostIcon, AllEnum.CoinItemId.Gold)
local nHasCoin = PlayerData.Coin:GetCoinCount(AllEnum.CoinItemId.Gold)
NovaAPI.SetTMPText(self._mapNode.txtCostCount, self.mapSlotCfg.OverlockDoraCostQty)
NovaAPI.SetTMPColor(self._mapNode.txtCostCount, nHasCoin < self.mapSlotCfg.OverlockDoraCostQty and Red_Unable or Blue_Normal)
end
function EquipmentUpgradeCtrl:PlayInAni()
self._mapNode.window:SetActive(true)
self._mapNode.aniWindow:Play("t_window_04_t_in")
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
end
function EquipmentUpgradeCtrl:PlayOutAni()
self._mapNode.aniWindow:Play("t_window_04_t_out")
self._mapNode.aniBlur:SetTrigger("tOut")
self:AddTimer(1, 0.2, "Close", true, true, true)
EventManager.Hit(EventId.TemporaryBlockInput, 0.2)
end
function EquipmentUpgradeCtrl:Close()
self._mapNode.window:SetActive(false)
self.bManualClose = true
EventManager.Hit(EventId.ClosePanel, PanelId.EquipmentUpgrade)
end
function EquipmentUpgradeCtrl:CheckMaxUpgrade(nId, nIdx)
local nIndex = 0
if nIdx ~= nil then
nIndex = nIdx
else
nIndex = self.nSelectUpgradeIndex
end
local nCurId = nId + self.mapEquipment.tbUpgradeCount[nIndex]
local nNextId = nCurId + 1
local mapNextLevel = ConfigTable.GetData("CharGemAttrValue", nNextId)
return mapNextLevel ~= nil and mapNextLevel.OverlockCount == 0
end
function EquipmentUpgradeCtrl:Awake()
self._mapNode.window:SetActive(false)
local tbParam = self:GetPanelParam()
if type(tbParam) == "table" then
self.nCharId = tbParam[1]
self.nSlotId = tbParam[2]
self.nSelectGemIndex = tbParam[3]
self.nSelectUpgradeIndex = tbParam[4] or 0
end
end
function EquipmentUpgradeCtrl:OnEnable()
self:Open()
end
function EquipmentUpgradeCtrl:OnDisable()
if not self.bManualClose then
PlayerData.Equipment:CacheEquipmentUpgrade(self.nSlotId, self.nSelectGemIndex, self.nCharId, self.nSelectUpgradeIndex)
end
end
function EquipmentUpgradeCtrl:OnDestroy()
end
function EquipmentUpgradeCtrl:OnBtnClick_Close()
self:PlayOutAni()
end
function EquipmentUpgradeCtrl:OnBtnClick_Property(_, nIndex)
local nBefore = self.nSelectUpgradeIndex
if self.nSelectUpgradeIndex == nIndex then
self.nSelectUpgradeIndex = 0
else
self.nSelectUpgradeIndex = nIndex
end
self:RefreshDesc()
for i = 1, 4 do
self._mapNode.imgMax[i]:SetActive(false)
self._mapNode.imgOff[i]:SetActive(self.nSelectUpgradeIndex ~= i)
self._mapNode.imgOn[i]:SetActive(self.nSelectUpgradeIndex == i)
end
if nBefore ~= 0 then
self._mapNode.goProperty[nBefore]:SetProperty(self.mapEquipment.tbAffix[nBefore], self.nCharId, false, self.mapEquipment.tbUpgradeCount[nBefore])
end
if self.nSelectUpgradeIndex ~= 0 then
local nUpgradeCount = self.mapEquipment:GetUpgradeCount()
local nLimit = ConfigTable.GetConfigNumber("CharGemOverlockCount")
local bAble = nUpgradeCount < nLimit
local bSelectChanged = false
local nId = self.mapEquipment.tbAffix[self.nSelectUpgradeIndex]
local mapCfg = ConfigTable.GetData("CharGemAttrValue", nId)
if mapCfg then
local nLeft = mapCfg.OverlockCount - self.mapEquipment.tbUpgradeCount[self.nSelectUpgradeIndex]
if 0 < nLeft then
bSelectChanged = true
end
end
if bSelectChanged and bAble then
local nCurId = self.mapEquipment.tbAffix[nIndex]
local bMaxUpgrade = self:CheckMaxUpgrade(nCurId, nIndex)
self._mapNode.imgMax[nIndex]:SetActive(bMaxUpgrade)
self._mapNode.goProperty[self.nSelectUpgradeIndex]:PlayUpgradeAni(self.mapEquipment.tbAffix[self.nSelectUpgradeIndex], self.nCharId, false, self.mapEquipment.tbUpgradeCount[self.nSelectUpgradeIndex] + 1)
end
end
end
function EquipmentUpgradeCtrl:OnBtnClick_Upgrade()
if self.nSelectUpgradeIndex == 0 then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Equipment_NeedToSelectAffix"))
return
end
local bAble = self.mapEquipment:CheckUpgradeAble()
if not bAble then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Equipment_UpgradeCountEmpty"))
return
end
local nId = self.mapEquipment.tbAffix[self.nSelectUpgradeIndex]
local mapCfg = ConfigTable.GetData("CharGemAttrValue", nId)
if not mapCfg then
return
end
local nLeft = mapCfg.OverlockCount - self.mapEquipment.tbUpgradeCount[self.nSelectUpgradeIndex]
if nLeft <= 0 then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Equipment_SelectAffixMax"))
return
end
local nHas = PlayerData.Item:GetItemCountByID(self.mapGemCfg.OverlockCostTid)
local nHasCoin = PlayerData.Item:GetItemCountByID(AllEnum.CoinItemId.Gold)
local bEnough = nHas >= self.mapSlotCfg.OverlockCostQty and nHasCoin >= self.mapSlotCfg.OverlockDoraCostQty
if not bEnough then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Equipment_MatNotEnough_Upgrade"))
return
end
local upgrade = function()
local sCost = ""
local mapItemCfg = ConfigTable.GetData_Item(self.mapGemCfg.OverlockCostTid)
if mapItemCfg then
sCost = mapItemCfg.Title
end
local msg = {
nType = AllEnum.MessageBox.Confirm,
sContent = orderedFormat(ConfigTable.GetUIText("Equipment_Upgrade_MainTips"), self.mapSlotCfg.OverlockCostQty, sCost),
sContentSub = ConfigTable.GetUIText("Equipment_Upgrade_SubTips"),
callbackConfirmAfterClose = function()
local callback = function()
local mapData = {
nAffixId = nId,
nCharId = self.nCharId,
nUpgradeCount = self.mapEquipment.tbUpgradeCount[self.nSelectUpgradeIndex]
}
self._mapNode.aniWindow:Play("t_window_04_t_out")
self._mapNode.aniBlur:SetTrigger("tOut")
self:AddTimer(1, 0.2, function()
self._mapNode.blur:SetActive(false)
EventManager.Hit(EventId.OpenPanel, PanelId.EquipmentSucBar, mapData, function()
self._mapNode.blur:SetActive(true)
self._mapNode.aniWindow:Play("t_window_04_t_in")
WwiseAudioMgr:PostEvent("ui_common_menu2")
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
self.nSelectUpgradeIndex = 0
self:Refresh()
end)
end, true, true, true)
EventManager.Hit(EventId.TemporaryBlockInput, 0.2)
end
PlayerData.Equipment:SendCharGemOverlockReq(self.nCharId, self.nSlotId, self.nSelectGemIndex, self.nSelectUpgradeIndex, callback)
end,
bBlur = false
}
EventManager.Hit(EventId.OpenMessageBox, msg)
end
local confirm = function()
self:ClosePopUp()
local bSame = self.mapEquipment:CheckUpgradeAlterSame(self.nSelectUpgradeIndex)
if not bSame then
local msg = {
nType = AllEnum.MessageBox.Confirm,
sContent = ConfigTable.GetUIText("Equipment_Upgrade_AlterHasNotSameAffix"),
callbackConfirmAfterClose = upgrade,
bBlur = false
}
EventManager.Hit(EventId.OpenMessageBox, msg)
else
upgrade()
end
end
local nCurId = nId + self.mapEquipment.tbUpgradeCount[self.nSelectUpgradeIndex]
local nNextId = nCurId + 1
local mapNextLevel = ConfigTable.GetData("CharGemAttrValue", nNextId)
local bMaxUpgrade = mapNextLevel ~= nil and mapNextLevel.OverlockCount == 0
if bMaxUpgrade then
self:OpenPopUp()
self._mapNode.goPropertyPopUp[1]:SetProperty(nCurId, self.nCharId)
self._mapNode.goPropertyPopUp[2]:SetProperty(nNextId, self.nCharId)
self._mapNode.btnOK.onClick:RemoveAllListeners()
self._mapNode.btnOK.onClick:AddListener(confirm)
self._mapNode.btnNG.onClick:RemoveAllListeners()
self._mapNode.btnNG.onClick:AddListener(function()
self:ClosePopUp()
end)
else
confirm()
end
end
function EquipmentUpgradeCtrl:OpenPopUp()
self._mapNode.goMaxUpgrade:SetActive(true)
self._mapNode.animPopUpWindow:Play("t_window_04_t_in")
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
end
function EquipmentUpgradeCtrl:ClosePopUp()
if self._mapNode.goMaxUpgrade.activeSelf == false then
return
end
self._mapNode.animPopUpWindow:Play("t_window_04_t_out")
self._mapNode.animPopUpBlur:SetTrigger("tOut")
EventManager.Hit(EventId.TemporaryBlockInput, 0.2)
self:AddTimer(1, 0.2, function()
self._mapNode.goMaxUpgrade:SetActive(false)
end, true, true, true)
end
function EquipmentUpgradeCtrl:OnBtnClick_Revert()
if self.nSelectUpgradeIndex == 0 then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Equipment_NeedToSelectAffix"))
return
end
if self.mapEquipment.tbUpgradeCount[self.nSelectUpgradeIndex] == 0 then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Equipment_CanNotRevert"))
return
end
local sCost = ""
local mapItemCfg = ConfigTable.GetData_Item(self.mapGemCfg.OverlockCostTid)
if mapItemCfg then
sCost = mapItemCfg.Title
end
local msg = {
nType = AllEnum.MessageBox.Confirm,
sContent = ConfigTable.GetUIText("Equipment_Revert_MainTips"),
sContentSub = orderedFormat(ConfigTable.GetUIText("Equipment_Revert_SubTips"), sCost),
callbackConfirmAfterClose = function()
local callback = function()
self._mapNode.aniWindow:Play("t_window_04_t_out")
self:AddTimer(1, 0.2, function()
self._mapNode.aniWindow:Play("t_window_04_t_in")
WwiseAudioMgr:PostEvent("ui_common_menu2")
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
self.nSelectUpgradeIndex = 0
self:Refresh()
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Equipment_RevertSuccess"))
end, true, true, true)
EventManager.Hit(EventId.TemporaryBlockInput, 0.2)
end
PlayerData.Equipment:SendCharGemOverlockRevertReq(self.nCharId, self.nSlotId, self.nSelectGemIndex, self.nSelectUpgradeIndex, callback)
end,
bBlur = false
}
EventManager.Hit(EventId.OpenMessageBox, msg)
end
function EquipmentUpgradeCtrl:OnBtnClick_MatTip(btn, index)
if index == 1 then
if self.mapGemCfg.OverlockCostTid > 0 then
local mapData = {
nTid = self.mapGemCfg.OverlockCostTid,
nNeedCount = self.mapSlotCfg.OverlockCostQty,
bShowDepot = true,
bShowJumpto = true
}
EventManager.Hit(EventId.OpenPanel, PanelId.ItemTips, btn.transform, mapData)
end
else
local mapData = {
nTid = AllEnum.CoinItemId.Gold,
nNeedCount = self.mapSlotCfg.OverlockDoraCostQty,
bShowDepot = true,
bShowJumpto = true
}
EventManager.Hit(EventId.OpenPanel, PanelId.ItemTips, btn.transform, mapData)
end
end
return EquipmentUpgradeCtrl