Major Update - 2.0.0.143

EN: 2.0.0.143
CN: 2.0.0.142
JP: 2.0.0.145
KR: 2.0.0.150
This commit is contained in:
SL1900
2026-10-20 13:00:00 +09:00
parent 4bcada6061
commit 08b515afd9
1773 changed files with 1095195 additions and 65670 deletions
@@ -0,0 +1,91 @@
local DormCharListItem = class("DormCharListItem", BaseCtrl)
DormCharListItem._mapNodeConfig = {
Mask = {},
imgSelectChoose = {},
TMPHint = {
sComponentName = "TMP_Text",
sLanguageId = "In_Formation"
},
imgSelectIcon = {},
imgSelect = {},
imgSelectedMask = {},
imgIcon = {sComponentName = "Image"},
btnGrid = {sComponentName = "UIButton"},
btnMask = {
sNodeName = "Mask",
sComponentName = "Button",
callback = "OnBtnClick_Mask"
},
TMPSelectTitle = {
sComponentName = "TMP_Text",
sLanguageId = "RoguelikeBuild_Manage_SelectedTitle"
},
imgCharRare = {sComponentName = "Image"}
}
DormCharListItem._mapEventConfig = {}
function DormCharListItem:Awake()
end
function DormCharListItem:FadeIn()
end
function DormCharListItem:FadeOut()
end
function DormCharListItem:OnEnable()
end
function DormCharListItem:OnDisable()
end
function DormCharListItem:OnDestroy()
end
function DormCharListItem:OnRelease()
end
function DormCharListItem:SetChar(nCharId)
local mapChar = ConfigTable.GetData_Character(nCharId)
if mapChar == nil then
return
end
local mapCharItem = ConfigTable.GetData_Item(nCharId)
if mapCharItem == nil then
return
end
local nSkinId = mapChar.DefaultSkinId
local mapCharSkin = ConfigTable.GetData_CharacterSkin(nSkinId)
if mapCharSkin == nil then
return
end
local sFrame = AllEnum.FrameType_New.BoardFrame .. AllEnum.BoardFrameColor[mapCharItem.Rarity]
self:SetAtlasSprite(self._mapNode.imgCharRare, "12_rare", sFrame)
self:SetPngSprite(self._mapNode.imgIcon, mapCharSkin.Icon .. AllEnum.CharHeadIconSurfix.XXL)
end
function DormCharListItem:RefreshItem(bSelect, nIdx, nCharId, bBanned, nSortType, nRoomId)
self.nCharId = nCharId
self:SetChar(nCharId)
self.bBanned = bBanned
self._mapNode.Mask:SetActive(bBanned)
self:SetSelect(bSelect)
if 0 < nRoomId then
local sName = PlayerData.PlayerDormData:GetRoomNameById(nRoomId)
NovaAPI.SetTMPText(self._mapNode.TMPHint, sName)
end
end
function DormCharListItem:SetSelect(bSelect, nIdx)
self._mapNode.imgSelect:SetActive(bSelect)
self._mapNode.imgSelectedMask:SetActive(bSelect)
self._mapNode.imgSelectIcon:SetActive(bSelect)
self._mapNode.imgSelectChoose:SetActive(bSelect)
end
function DormCharListItem:OnBtnClick_Mask(btn)
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Formation_Selected"))
end
function DormCharListItem:OnBtnClick_Detail(btn)
if self._panel.nLoadProcess ~= nil and self._panel.nLoadProcess > 1 then
return
end
if PlayerData.Guide:GetGuideState() then
return
end
if self.nCharId ~= nil then
EventManager.Hit(EventId.OpenPanel, PanelId.CharBgPanel, PanelId.CharInfo, self.nCharId, {
self.nCharId
}, false)
end
end
return DormCharListItem
@@ -0,0 +1,431 @@
local DormSelectCharCtrl = class("DormSelectCharCtrl", BaseCtrl)
local LocalData = require("GameCore.Data.LocalData")
local newDayTime = UTILS.GetDayRefreshTimeOffset()
local _
_, Select = ColorUtility.TryParseHtmlString("#264278")
_, Unselect = ColorUtility.TryParseHtmlString("#94AAC0")
DormSelectCharCtrl._mapNodeConfig = {
sv = {
sComponentName = "LoopScrollView"
},
labEmpty = {
sComponentName = "TMP_Text",
sLanguageId = "Filter_NoAim"
},
btnCloseList = {
sComponentName = "UIButton",
callback = "OnBtnClick_Close"
},
btnConfirm = {
sComponentName = "UIButton",
callback = "OnBtnClick_Confirm"
},
rtCharListContent = {sComponentName = "Transform"},
btnFilter = {
sComponentName = "UIButton",
callback = "OnBtnClick_Filter"
},
imgFilterChoose = {},
txtBtnListConifrm = {
sComponentName = "TMP_Text",
sLanguageId = "MainLine_Select_Btn_Confirm"
},
txtBtnListClose = {
sComponentName = "TMP_Text",
sLanguageId = "MainLine_Select_Btn_Cancel"
},
goSortRare = {
sComponentName = "UIButton",
callback = "OnBtnClick_SortRarity"
},
goSortAffinity = {
sComponentName = "UIButton",
callback = "OnBtnClick_SortAffinity"
},
imgArrowUpEnable = {},
imgArrowUpDisable = {},
imgArrowDownEnable = {},
imgArrowDownDisable = {},
labSelected = {sComponentName = "TMP_Text"},
btnFavoriteOrder = {
sComponentName = "UIButton",
callback = "OnBtnClick_InFavoriteOrder"
},
InFavoriteOrder = {
sNodeName = "InFavoriteOrder",
sComponentName = "CanvasGroup"
},
txtOffLabel = {
sNodeName = "OffLabel",
sComponentName = "TMP_Text",
sLanguageId = "CharacterList_Common"
},
txtInLabel = {
sNodeName = "InLabel",
sComponentName = "TMP_Text",
sLanguageId = "CharacterList_Common"
},
btnHome = {},
btnBack = {
sComponentName = "UIButton",
callback = "OnBtnClick_Close"
},
btnHelp = {},
txtTitle = {
sComponentName = "TMP_Text",
nCount = 2,
sLanguageId = "Dorm_CharListTitle"
},
TopBarPanel = {}
}
DormSelectCharCtrl._mapEventConfig = {
[EventId.FilterConfirm] = "RefreshByFilter",
Guide_PositionCharPos = "OnEvent_PositionCharPos",
ForamtionDown = "OnEvent_ForamtionDown",
SelectTemplateDD = "OnEvent_SortRuleChange"
}
function DormSelectCharCtrl:Awake()
end
function DormSelectCharCtrl:FadeIn()
end
function DormSelectCharCtrl:FadeOut()
end
function DormSelectCharCtrl:OnEnable()
self:SetSortBtnLable()
self.tbSortCfg = {
nSortType = PlayerData.Filter.nDormCharSrotType,
bOrder = PlayerData.Filter.bDormCharOrder
}
self.mapGridCtrl = {}
self.gameObject:SetActive(false)
local isDirty = PlayerData.Filter:IsDirty(AllEnum.OptionType.Char)
self._mapNode.imgFilterChoose:SetActive(isDirty)
self.bOpen = false
self.bInFavorite = false
self:RefreshFavoriteTopState()
self._mapNode.btnHome.gameObject:SetActive(false)
self._mapNode.btnHelp.gameObject:SetActive(false)
self.animator = self.gameObject:GetComponent("Animator")
end
function DormSelectCharCtrl:OnDisable()
self.bOpen = false
self.tbFilterCfg = {}
for nInstanceId, mapCtrl in pairs(self.mapGridCtrl) do
self:UnbindCtrlByNode(mapCtrl)
self.mapGridCtrl[nInstanceId] = nil
end
self.mapGridCtrl = {}
self.gameObject:SetActive(false)
self._mapNode.TopBarPanel:SetActive(true)
end
function DormSelectCharCtrl:OnDestroy()
end
function DormSelectCharCtrl:OnRelease()
end
function DormSelectCharCtrl:ShowList(tbCurSelectChar, bFastSelect, nIdx, tbCharInRoom)
self.tbCharInRoom = tbCharInRoom
self.tbOriginChar = clone(tbCurSelectChar)
self.gameObject:SetActive(true)
self.tbAllChar = PlayerData.Char:GetDataForCharList()
self.bFastSelect = bFastSelect == true
self.nIdx = not self.bFastSelect and nIdx or 0
self.curChar = tbCurSelectChar
self.bOpen = true
self.nGuideOpenVer = (self.nGuideOpenVer or 0) + 1
self.mapGridCtrl = {}
self.tbFilterCfg = {}
self:RefreshOrderState()
self:FilterChar()
self:SortChar()
self._mapNode.sv:Init(#self.tbSortedChar, self, self.OnGridRefresh, self.OnGridBtnClick)
self._mapNode.btnConfirm.gameObject:SetActive(true)
self:SetCharCount()
self:SetSortBtnState(self._mapNode.goSortRare, self.tbSortCfg.nSortType == AllEnum.SortType.Rarity, self.tbSortCfg.bOrder)
self:SetSortBtnState(self._mapNode.goSortAffinity, self.tbSortCfg.nSortType == AllEnum.SortType.Affinity, self.tbSortCfg.bOrder)
end
function DormSelectCharCtrl:Refresh()
local isDirty = PlayerData.Filter:IsDirty(AllEnum.OptionType.Char)
self._mapNode.imgFilterChoose:SetActive(isDirty)
self:FilterChar()
self:SortChar()
self:RefreshOrderState()
self:RefreshFavoriteTopState()
local nCurCount = #self.tbSortedChar
if 0 < nCurCount then
self._mapNode.labEmpty.gameObject:SetActive(false)
self._mapNode.sv.gameObject:SetActive(true)
self._mapNode.sv:Init(#self.tbSortedChar, self, self.OnGridRefresh, self.OnGridBtnClick)
else
self._mapNode.sv.gameObject:SetActive(false)
self._mapNode.labEmpty.gameObject:SetActive(true)
end
end
function DormSelectCharCtrl:CloseList()
local closeCallback = function()
self.tbFilterCfg = {}
for nInstanceId, mapCtrl in pairs(self.mapGridCtrl) do
self:UnbindCtrlByNode(mapCtrl)
self.mapGridCtrl[nInstanceId] = nil
end
self.mapGridCtrl = {}
self.gameObject:SetActive(false)
self._mapNode.TopBarPanel:SetActive(true)
self.bOpen = false
local DormGuideAdapter = require("Game.UI.Dorm.DormGuideAdapter")
DormGuideAdapter.NoteCharClosed()
EventManager.Hit("DormGuide_CharSelectClosed")
end
self.animator:Play("LiveTogether_out")
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
self:AddTimer(1, 0.3, closeCallback, true, true, true, nil)
self._mapNode.TopBarPanel:SetActive(false)
end
function DormSelectCharCtrl:OnGridRefresh(goGrid, gridIndex)
local nInstanceId = goGrid:GetInstanceID()
if not self.mapGridCtrl[nInstanceId] then
self.mapGridCtrl[nInstanceId] = self:BindCtrlByNode(goGrid, "Game.UI.Dorm.DormCharSelect.DormCharListItem")
end
local nIndex = gridIndex + 1
local nCharId = self.tbSortedChar[nIndex]
local selectIdx = table.indexof(self.curChar, nCharId)
local nMark = selectIdx
local bBaned = false
bBaned = self.tbCharInRoom[nCharId] ~= nil
local nRoomId = bBaned and self.tbCharInRoom[nCharId] or 0
self.mapGridCtrl[nInstanceId]:RefreshItem(0 < selectIdx, nMark, nCharId, bBaned, self.tbSortCfg.nSortType, nRoomId)
end
function DormSelectCharCtrl:OnGridBtnClick(goGrid, gridIndex)
local nIndex = gridIndex + 1
local nCharId = self.tbSortedChar[nIndex]
local nTeamIdx = table.indexof(self.curChar, nCharId)
if 0 < nTeamIdx then
self.curChar[nTeamIdx] = 0
self:SetGridIndex(nCharId, 0)
for idx, CharId in ipairs(self.curChar) do
self:SetGridIndex(CharId, idx)
end
NovaAPI.DispatchEventWithData("DORM_LUA_SWITCH_ACTOR_CALLBACK", nil, {false, nCharId})
else
local nPos = table.indexof(self.curChar, 0)
if 0 < nPos then
self.curChar[nPos] = nCharId
for idx, CharId in ipairs(self.curChar) do
self:SetGridIndex(CharId, idx)
end
PlayerData.Voice:PlayCharVoice("swap", nCharId)
local nSkinId = 0
local mapChar = ConfigTable.GetData_Character(nCharId)
if mapChar ~= nil then
nSkinId = mapChar.DefaultSkinId
end
NovaAPI.DispatchEventWithData("DORM_LUA_SWITCH_ACTOR_CALLBACK", nil, {
true,
nCharId,
nSkinId
})
else
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("DormTips_RoleFull") or "")
end
end
self:SetCharCount()
EventManager.Hit("OnEvent_ChangeTeamModel", self.curChar)
end
function DormSelectCharCtrl:SetGridIndex(nCharId, nIdx)
local nGirdIdx = table.indexof(self.tbSortedChar, nCharId)
local trGrid = self._mapNode.rtCharListContent:Find(tostring(nGirdIdx - 1))
if trGrid ~= nil then
local nInstanceId = trGrid.gameObject:GetInstanceID()
self.mapGridCtrl[nInstanceId]:SetSelect(0 < nIdx, nIdx)
end
end
function DormSelectCharCtrl:FilterChar()
self.tbSortedChar = {}
for _, data in pairs(self.tbAllChar) do
local mapCharCfgData = ConfigTable.GetData_Character(data.nId)
local mapDormCharCfgData = ConfigTable.GetData("DormRole", data.nId, false)
local bAvailable = mapCharCfgData.Available and mapDormCharCfgData ~= nil
if bAvailable then
local isFilter = PlayerData.Filter:CheckFilterByChar(data.nId)
local bCur = table.indexof(self.curChar, data.nId) > 0
if isFilter or bCur then
local mapSkill = PlayerData.Char:GetCharSkillUpgradeData(data.nId)
local nSkillLevelSum = 0
for k, v in pairs(mapSkill) do
nSkillLevelSum = nSkillLevelSum + v.nLv
end
data.SkillLevel = nSkillLevelSum
table.insert(self.tbSortedChar, data)
end
end
end
print("过滤后 charCount:" .. #self.tbSortedChar)
end
function DormSelectCharCtrl:SortChar()
local tbCharId = {}
UTILS.SortByPriority(self.tbSortedChar, {
AllEnum.CharSortField[self.tbSortCfg.nSortType]
}, PlayerData.Char:GetCharSortField(), self.tbSortCfg.bOrder, self.bInFavorite)
self.tbSortedChar = self:MoveElementsToFront(self.tbSortedChar, self.curChar)
for _, mapCharId in ipairs(self.tbSortedChar) do
table.insert(tbCharId, mapCharId.nId)
end
self.tbSortedChar = tbCharId
end
function DormSelectCharCtrl:SetCharCount()
local nCurCount = 0
for _, nCharId in ipairs(self.curChar) do
if nCharId ~= 0 then
nCurCount = nCurCount + 1
end
end
local mapDormRoomCfgData = ConfigTable.GetData("DormRoom", self._panel.nCurRoom)
local maxCharCount = 0
if mapDormRoomCfgData ~= nil then
maxCharCount = mapDormRoomCfgData.RoleNum
end
NovaAPI.SetTMPText(self._mapNode.labSelected, orderedFormat(ConfigTable.GetUIText("Board_Selected_Count"), nCurCount, maxCharCount))
end
function DormSelectCharCtrl:MoveElementsToFront(sortedList, elementsToMove)
local lookup = {}
for _, v in ipairs(elementsToMove) do
lookup[v] = true
end
local moved, rest = {}, {}
for _, v in ipairs(sortedList) do
if lookup[v.nId] then
table.insert(moved, v)
else
table.insert(rest, v)
end
end
for _, v in ipairs(rest) do
table.insert(moved, v)
end
return moved
end
function DormSelectCharCtrl:RefreshOrderState()
self._mapNode.imgArrowUpEnable:SetActive(self.tbSortCfg.bOrder)
self._mapNode.imgArrowUpDisable:SetActive(not self.tbSortCfg.bOrder)
self._mapNode.imgArrowDownEnable:SetActive(not self.tbSortCfg.bOrder)
self._mapNode.imgArrowDownDisable:SetActive(self.tbSortCfg.bOrder)
end
function DormSelectCharCtrl:RefreshByFilter()
self:Refresh()
end
function DormSelectCharCtrl:OnEvent_ForamtionDown(nIdx)
local nCurCharId = self.curChar[nIdx]
self.curChar[nIdx] = 0
local nGridIdx = table.indexof(self.tbSortedChar, nCurCharId)
local trGrid = self._mapNode.rtCharListContent:Find(tostring(nGridIdx - 1))
if trGrid ~= nil then
local nInstanceId = trGrid.gameObject:GetInstanceID()
self.mapGridCtrl[nInstanceId]:SetSelect(false, nIdx)
end
EventManager.Hit("OnEvent_ChangeTeamModel", self.curChar)
end
function DormSelectCharCtrl:OnEvent_SortRuleChange(nValue)
if not self.bOpen then
return
end
local nV = nValue + 1
self.tbSortCfg.nSortType = PlayerData.Char:GetCharSortType()[nV]
self.tbSortCfg.bOrder = false
PlayerData.Filter:CacheCharSort(self.tbSortCfg.nSortType, self.tbSortCfg.bOrder)
self:Refresh()
end
function DormSelectCharCtrl:OnBtnClick_Close(btn)
EventManager.Hit("DormCharSelectResult", self.curChar, false)
end
function DormSelectCharCtrl:OnBtnClick_Clear(btn)
for idx, nCharId in ipairs(self.curChar) do
if self.curChar[idx] ~= 0 then
self:SetGridIndex(self.curChar[i], 0)
self.curChar[idx] = 0
end
end
EventManager.Hit("OnEvent_ChangeTeamModel", self.curChar)
end
function DormSelectCharCtrl:OnBtnClick_Confirm(btn)
EventManager.Hit("DormCharSelectResult", self.curChar, true)
end
function DormSelectCharCtrl:OnBtnClick_Filter()
local tbOption = {
AllEnum.ChooseOption.Char_Element,
AllEnum.ChooseOption.Char_Rarity,
AllEnum.ChooseOption.Char_PowerStyle,
AllEnum.ChooseOption.Char_TacticalStyle,
AllEnum.ChooseOption.Char_AffiliatedForces
}
EventManager.Hit(EventId.OpenPanel, PanelId.FilterPopupPanel, tbOption)
end
function DormSelectCharCtrl:OnEvent_PositionCharPos(_tmpChar)
for i, v in pairs(self.tbSortedChar) do
if v == _tmpChar then
self._mapNode.sv:SetScrollGridPos(i - 1, 0, 0)
EventManager.Hit("Positioning_Char_Grid", _tmpChar, i - 1)
break
end
end
end
function DormSelectCharCtrl:SetSortBtnState(btn, bSelect, bOrder)
local txtLable = btn.transform:Find("Dropdown/Label"):GetComponent("TMP_Text")
local imgArrowUp = btn.transform:Find("Dropdown/goDummy/imgArrowUp"):GetComponent("Image")
local imgArrowDown = btn.transform:Find("Dropdown/goDummy/imgArrowDown"):GetComponent("Image")
if bSelect then
NovaAPI.SetImageColor(imgArrowUp, bOrder and Select or Unselect)
NovaAPI.SetImageColor(imgArrowDown, bOrder and Unselect or Select)
else
NovaAPI.SetImageColor(imgArrowUp, Unselect)
NovaAPI.SetImageColor(imgArrowDown, Unselect)
end
NovaAPI.SetTMPColor(txtLable, bSelect and Select or Unselect)
end
function DormSelectCharCtrl:SetSortBtnLable()
local txtLable1 = self._mapNode.goSortAffinity.transform:Find("Dropdown/Label"):GetComponent("TMP_Text")
local txtLable2 = self._mapNode.goSortRare.transform:Find("Dropdown/Label"):GetComponent("TMP_Text")
NovaAPI.SetTMPText(txtLable1, ConfigTable.GetUIText("CharList_Sort_Toggle_Affinity"))
NovaAPI.SetTMPText(txtLable2, ConfigTable.GetUIText("Depot_SortByRare"))
end
function DormSelectCharCtrl:OnBtnClick_SortRarity(btn)
if self.tbSortCfg.nSortType == AllEnum.SortType.Rarity then
self.tbSortCfg.bOrder = not self.tbSortCfg.bOrder
else
self.tbSortCfg.nSortType = AllEnum.SortType.Rarity
self.tbSortCfg.bOrder = true
end
PlayerData.Filter:CacheDormSort(self.tbSortCfg.nSortType, self.tbSortCfg.bOrder)
self:SetSortBtnState(btn, true, self.tbSortCfg.bOrder)
self:SetSortBtnState(self._mapNode.goSortAffinity, false, self.tbSortCfg.bOrder)
self:Refresh()
end
function DormSelectCharCtrl:OnBtnClick_SortAffinity(btn)
if self.tbSortCfg.nSortType == AllEnum.SortType.Affinity then
self.tbSortCfg.bOrder = not self.tbSortCfg.bOrder
else
self.tbSortCfg.nSortType = AllEnum.SortType.Affinity
self.tbSortCfg.bOrder = true
end
PlayerData.Filter:CacheDormSort(self.tbSortCfg.nSortType, self.tbSortCfg.bOrder)
self:SetSortBtnState(btn, true, self.tbSortCfg.bOrder)
self:SetSortBtnState(self._mapNode.goSortRare, false, self.tbSortCfg.bOrder)
self:Refresh()
end
function DormSelectCharCtrl:RefreshFavoriteTopState()
if self.bInFavorite then
NovaAPI.SetCanvasGroupAlpha(self._mapNode.InFavoriteOrder, 1)
else
NovaAPI.SetCanvasGroupAlpha(self._mapNode.InFavoriteOrder, 0)
end
end
function DormSelectCharCtrl:OnBtnClick_InFavoriteOrder(btn)
self.bInFavorite = not self.bInFavorite
local sTip = ""
if self.bInFavorite then
sTip = ConfigTable.GetUIText("OpenCharacterCommonTop_Tip")
else
sTip = ConfigTable.GetUIText("CloseCharacterCommonTop_Tip")
end
EventManager.Hit(EventId.OpenMessageBox, sTip)
self:Refresh()
end
return DormSelectCharCtrl