Files
StellaSora_DataLua/lua/game/ui/raid/raidcountctrl.lua
T
SL1900 80af235e05 Update - 1.12.0.120
EN: 1.12.0.120
CN: 1.12.0.120
JP: 1.12.0.124
KR: 1.12.0.124
2026-06-30 14:30:00 +09:00

278 lines
8.7 KiB
Lua

local RaidCountCtrl = class("RaidCountCtrl", BaseCtrl)
RaidCountCtrl._mapNodeConfig = {
txtWindowTitle = {
sComponentName = "TMP_Text",
sLanguageId = "Raid_Title_Raid"
},
btnClose = {
sComponentName = "UIButton",
callback = "OnBtnClick_Cancel"
},
txtRaidCountCn = {
sComponentName = "TMP_Text",
sLanguageId = "Raid_RaidCount"
},
txtRaidCount = {sComponentName = "TMP_Text"},
txtRaidTip = {sComponentName = "TMP_Text", sLanguageId = "Raid_Tip"},
imgEnergy = {sComponentName = "Image"},
txtEnergyCount = {sComponentName = "TMP_Text"},
Slider = {
sComponentName = "Slider",
callback = "OnValueChange_Slider"
},
btnReduce = {
sComponentName = "UIButton",
callback = "OnBtnClick_Reduce"
},
btnAdd = {
sComponentName = "UIButton",
callback = "OnBtnClick_Add"
},
btnMin = {
sComponentName = "UIButton",
callback = "OnBtnClick_Min"
},
btnMax = {
sComponentName = "UIButton",
callback = "OnBtnClick_Max"
},
btnGrayAdd = {
sComponentName = "UIButton",
callback = "OnBtnClick_MaxGray"
},
btnGrayReduce = {
sComponentName = "UIButton",
callback = "OnBtnClick_MinGray"
},
btnGrayMax = {
sComponentName = "UIButton",
callback = "OnBtnClick_MaxGray"
},
btnGrayMin = {
sComponentName = "UIButton",
callback = "OnBtnClick_MinGray"
},
btnConfirm1 = {
sComponentName = "UIButton",
callback = "OnBtnClick_Confirm"
},
txtBtnConfirm = {
sComponentName = "TMP_Text",
sLanguageId = "Raid_Btn_Raid"
},
btnCancel = {
sComponentName = "UIButton",
callback = "OnBtnClick_Cancel"
},
txtBtnCancel = {
sComponentName = "TMP_Text",
sLanguageId = "MessageBox_Cancel"
},
imgDoubleDrop = {},
txtDoubleDrop = {sComponentName = "TMP_Text"}
}
RaidCountCtrl._mapEventConfig = {
[EventId.UpdateEnergy] = "OnEvent_Energy"
}
function RaidCountCtrl:Open(nId, nEnergy, nType, nActId)
self.nId = nId
self.nEnergy = nEnergy
self.nSelectCount = 1
self.nType = nType
self.nActId = nActId
self.nRemainDoubleCount = 0
for i = 1, 2 do
self:SetSprite_Coin(self._mapNode.imgEnergy, AllEnum.CoinItemId.Energy)
end
self:RefreshDoubleCount()
self:RefreshData()
self:RefreshCount()
self:RefreshBar()
self:PlayInAni()
end
function RaidCountCtrl:RefreshData()
self.nCurEnergy = PlayerData.Base:GetCurEnergy().nEnergy
local nCount = math.floor(self.nCurEnergy / self.nEnergy)
if self.nRemainDoubleCount > 0 then
self.nMaxCount = self.nRemainDoubleCount
else
self.nMaxCount = 1 < nCount and nCount or 1
end
NovaAPI.SetSliderMaxValue(self._mapNode.Slider, self.nMaxCount)
NovaAPI.SetSliderMinValue(self._mapNode.Slider, 1)
NovaAPI.SetSliderInteractable(self._mapNode.Slider, self.nMaxCount > 1)
end
function RaidCountCtrl:RefreshCount()
local nCost = self.nSelectCount * self.nEnergy
NovaAPI.SetTMPText(self._mapNode.txtRaidCount, self.nSelectCount)
NovaAPI.SetTMPText(self._mapNode.txtEnergyCount, nCost)
NovaAPI.SetTMPColor(self._mapNode.txtEnergyCount, nCost > self.nCurEnergy and Red_Unable or Blue_Normal)
self:RefreshAddButton(self.nSelectCount < self.nMaxCount)
self:RefreshReduceButton(self.nSelectCount > 1)
end
function RaidCountCtrl:RefreshAddButton(bAble)
self._mapNode.btnGrayAdd.gameObject:SetActive(not bAble)
self._mapNode.btnAdd.gameObject:SetActive(bAble)
self._mapNode.btnGrayMax.gameObject:SetActive(not bAble)
self._mapNode.btnMax.gameObject:SetActive(bAble)
end
function RaidCountCtrl:RefreshReduceButton(bAble)
self._mapNode.btnGrayReduce.gameObject:SetActive(not bAble)
self._mapNode.btnReduce.gameObject:SetActive(bAble)
self._mapNode.btnGrayMin.gameObject:SetActive(not bAble)
self._mapNode.btnMin.gameObject:SetActive(bAble)
end
function RaidCountCtrl:RefreshBar()
NovaAPI.SetSliderValue(self._mapNode.Slider, self.nSelectCount)
end
function RaidCountCtrl:RefreshDoubleCount()
self._mapNode.imgDoubleDrop.gameObject:SetActive(false)
local actData = PlayerData.Activity:GetActivityDataByType(GameEnum.activityType.Double)
if actData ~= nil and actData:CheckActShow() then
local tbInstanceType = actData:GetInstanceType()
if table.indexof(tbInstanceType, self.nType) > 0 then
self._mapNode.imgDoubleDrop.gameObject:SetActive(true)
local nDoubleCount, nMaxDoubleCount = actData:GetDoubleDropsTimes()
local nCurEnergy = PlayerData.Base:GetCurEnergy().nEnergy
local nCount = math.floor(nCurEnergy / self.nEnergy)
local nRemainDoubleCount = nMaxDoubleCount - nDoubleCount
if 0 < nRemainDoubleCount then
self.nRemainDoubleCount = math.max(math.min(nRemainDoubleCount, nCount), 1)
else
self.nRemainDoubleCount = 0
end
local str = actData:GetDropString()
NovaAPI.SetTMPText(self._mapNode.txtDoubleDrop, str)
end
end
end
function RaidCountCtrl:PlayInAni()
self.gameObject:SetActive(true)
self.ani:Play("t_window_04_t_in")
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
end
function RaidCountCtrl:PlayOutAni()
self.ani:Play("t_window_04_t_out")
local closeCall = function()
self:Close()
end
self:AddTimer(1, 0.2, closeCall, true, true, true)
end
function RaidCountCtrl:Close()
self.gameObject:SetActive(false)
end
function RaidCountCtrl:Awake()
self.ani = self.gameObject.transform:GetComponent("Animator")
end
function RaidCountCtrl:OnEnable()
end
function RaidCountCtrl:OnDisable()
end
function RaidCountCtrl:OnDestroy()
end
function RaidCountCtrl:OnBtnClick_Cancel(btn)
EventManager.Hit("RaidShowPop", false)
end
function RaidCountCtrl:OnValueChange_Slider(_, value)
self.nSelectCount = math.ceil(value)
self:RefreshCount()
end
function RaidCountCtrl:OnBtnClick_Add(btn)
local nRemain = self.nMaxCount - self.nSelectCount
if nRemain <= 0 then
return
end
if btn.Operate_Type == 0 then
self.nSelectCount = self.nSelectCount + 1
elseif btn.Operate_Type == 3 then
local nAdd = 2 ^ btn.CurrentGear
local nAfterRemain = nRemain - nAdd
if nAfterRemain < 0 then
nAdd = nRemain
end
self.nSelectCount = math.floor(self.nSelectCount + nAdd)
end
self:RefreshCount()
self:RefreshBar()
end
function RaidCountCtrl:OnBtnClick_Min(btn)
self.nSelectCount = 1
self:RefreshCount()
self:RefreshBar()
end
function RaidCountCtrl:OnBtnClick_Max(btn)
self.nSelectCount = self.nMaxCount
self:RefreshCount()
self:RefreshBar()
end
function RaidCountCtrl:OnBtnClick_Reduce(btn)
if self.nSelectCount <= 1 then
return
end
if btn.Operate_Type == 0 then
self.nSelectCount = self.nSelectCount - 1
elseif btn.Operate_Type == 3 then
self.nSelectCount = math.floor(self.nSelectCount - 2 ^ btn.CurrentGear)
end
if self.nSelectCount < 1 then
self.nSelectCount = 1
end
self:RefreshCount()
self:RefreshBar()
end
function RaidCountCtrl:OnBtnClick_Confirm(btn)
local nCost = self.nSelectCount * self.nEnergy
if nCost > self.nCurEnergy then
function self.closeCallback()
local callback = function()
EventManager.Hit(EventId.ClosePanel, PanelId.EnergyBuy)
EventManager.Hit(EventId.ClosePanel, PanelId.Raid)
end
EventManager.Hit(EventId.OpenPanel, PanelId.EnergyBuy, AllEnum.EnergyPanelType.Main, {}, true, callback)
end
self.closeCallback()
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("MainlineData_Energy"))
return
end
local nWorldClass = PlayerData.Base:GetWorldClass()
local mapCfg = ConfigTable.GetData("WorldClass", nWorldClass + 1, true)
local nFullExp = mapCfg and mapCfg.Exp or 0
local mapBefore = {
nLevel = nWorldClass,
nExp = PlayerData.Base:GetWorldExp(),
nMaxLevel = PlayerData.Base:GetMaxWorldClass(),
nMaxExp = nFullExp
}
local callback = function(mapData, mapChangeInfo)
EventManager.Hit("RaidSuccess")
EventManager.Hit("RaidShowReward", mapData, mapBefore, mapChangeInfo)
end
if self.nType == GameEnum.instanceType.DailyInstance then
PlayerData.DailyInstance:SendDailyInstanceRaidReq(self.nId, self.nSelectCount, callback)
elseif self.nType == GameEnum.instanceType.RegionBoss then
PlayerData.RogueBoss:Sweep(self.nId, self.nSelectCount, callback)
elseif self.nType == GameEnum.instanceType.CharGemInstance then
PlayerData.EquipmentInstance:SendEquipmentInstanceRaidReq(self.nId, self.nSelectCount, callback)
elseif self.nType == GameEnum.instanceType.SkillInstance then
PlayerData.SkillInstance:SendSkillInstanceRaidReq(self.nId, self.nSelectCount, callback)
elseif self.nType == 0 then
local activityLevelsData = PlayerData.Activity:GetActivityDataById(self.nActId)
activityLevelsData:SendActivityLevelsSweepReq(self.nActId, self.nId, self.nSelectCount, callback)
end
end
function RaidCountCtrl:OnBtnClick_MinGray()
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Crafting_Count_Min"))
end
function RaidCountCtrl:OnBtnClick_MaxGray()
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Crafting_Count_Max"))
end
function RaidCountCtrl:OnEvent_Energy()
if self.nId == nil then
return
end
self:RefreshDoubleCount()
self:RefreshData()
self:RefreshCount()
end
return RaidCountCtrl