Initial version - 1.2.0.60

EN: 1.2.0.60
CN: 1.2.0.61
JP: 1.2.0.63
KR: 1.2.0.67
This commit is contained in:
SL1900
2025-12-03 01:00:00 +09:00
commit 5e0d58cfad
3595 changed files with 9373562 additions and 0 deletions
@@ -0,0 +1,127 @@
local StorySetChapterItemCtrl = class("StorySetChapterItemCtrl", BaseCtrl)
local ClientManager = CS.ClientManager.Instance
StorySetChapterItemCtrl._mapNodeConfig = {
animRoot = {sNodeName = "AnimRoot", sComponentName = "Animator"},
goEmpty = {},
goItem = {},
imgChapter = {sComponentName = "Image"},
imgTitleBg = {},
txtTitle = {sComponentName = "TMP_Text"},
txtChapterName = {sComponentName = "TMP_Text"},
goLock = {},
txtLock = {sComponentName = "TMP_Text"},
goRedDot = {},
goHighLight = {}
}
StorySetChapterItemCtrl._mapEventConfig = {}
StorySetChapterItemCtrl._mapRedDotConfig = {}
function StorySetChapterItemCtrl:PlayAnim(bIn)
local nAnimLen = 0
local sAnimName = ""
if bIn then
sAnimName = self.bUnlock and "StorySetPanel_chapter_in" or "StorySetPanel_chapter_Lock"
else
sAnimName = "StorySetPanel_chapter_out"
end
nAnimLen = NovaAPI.GetAnimClipLength(self._mapNode.animRoot, {sAnimName})
self._mapNode.animRoot:Play(sAnimName)
return nAnimLen
end
function StorySetChapterItemCtrl:RefreshItem(data)
self.bUnlock = true
local bEmpty = false
self._mapNode.goLock.gameObject:SetActive(false)
self._mapNode.goRedDot.gameObject:SetActive(false)
self._mapNode.goHighLight.gameObject:SetActive(false)
if data == nil then
bEmpty = true
NovaAPI.SetTMPText(self._mapNode.txtChapterName, ConfigTable.GetUIText("StorySet_Chapter_Empty"))
self._mapNode.imgTitleBg.gameObject:SetActive(false)
else
self.bUnlock = data.bUnlock
self._mapNode.goLock.gameObject:SetActive(not data.bUnlock)
local nChapterId = data.nId
local mapCfg = ConfigTable.GetData("StorySetChapter", nChapterId)
if mapCfg ~= nil then
self._mapNode.imgTitleBg.gameObject:SetActive(true)
NovaAPI.SetTMPText(self._mapNode.txtTitle, mapCfg.Title)
if not data.bUnlock then
bEmpty = true
if mapCfg.OpenTime ~= "" then
local nOpenTime = ClientManager:ISO8601StrToTimeStamp(mapCfg.OpenTime)
local timerCount = function()
local sTimeStr = ""
local nCurTime = ClientManager.serverTimeStamp
local nRemainTime = nOpenTime - nCurTime
if 0 <= nRemainTime then
local day = math.floor(nRemainTime / 86400)
local hour = math.floor(nRemainTime / 3600)
local min = math.floor((nRemainTime - hour * 3600) / 60)
local sec = nRemainTime - hour * 3600 - min * 60
if 0 < day then
sTimeStr = orderedFormat(ConfigTable.GetUIText("StorySet_Chapter_Open_Day"), day)
elseif 0 < hour then
sTimeStr = orderedFormat(ConfigTable.GetUIText("StorySet_Chapter_Open_Hour"), hour)
elseif 0 < min then
sTimeStr = orderedFormat(ConfigTable.GetUIText("StorySet_Chapter_Open_Min"), min)
elseif 0 <= sec then
sTimeStr = orderedFormat(ConfigTable.GetUIText("StorySet_Chapter_Open_Sec"), sec)
end
NovaAPI.SetTMPText(self._mapNode.txtLock, orderedFormat(ConfigTable.GetUIText("StorySet_Chapter_Open_Time"), sTimeStr))
else
if self.unlockTimer ~= nil then
self.unlockTimer:Cancel()
end
self.unlockTimer = nil
EventManager.Hit("StorySetChapterRefresh")
end
end
if self.unlockTimer ~= nil then
self.unlockTimer:Cancel()
self.unlockTimer = nil
end
timerCount()
self.unlockTimer = self:AddTimer(0, 1, function()
timerCount()
end, true, true, false)
else
NovaAPI.SetTMPText(self._mapNode.txtLock, mapCfg.LockText)
end
NovaAPI.SetTMPText(self._mapNode.txtChapterName, ConfigTable.GetUIText("StorySet_Chapter_Empty"))
else
self:SetPngSprite(self._mapNode.imgChapter, "Icon/MapEpisode/" .. mapCfg.Icon)
NovaAPI.SetTMPText(self._mapNode.txtChapterName, mapCfg.Name)
end
local bHighLight = mapCfg.IsHighLight
bHighLight = bHighLight and RedDotManager.GetValid(RedDotDefine.Story_Set_Chapter, data.nId)
self._mapNode.goHighLight.gameObject:SetActive(bHighLight)
end
RedDotManager.RegisterNode(RedDotDefine.Story_Set_Chapter, data.nId, self._mapNode.goRedDot, nil, nil, true)
end
self._mapNode.goEmpty.gameObject:SetActive(bEmpty)
self._mapNode.goItem.gameObject:SetActive(not bEmpty)
self:PlayAnim(true)
end
function StorySetChapterItemCtrl:Awake()
end
function StorySetChapterItemCtrl:FadeIn()
end
function StorySetChapterItemCtrl:FadeOut()
end
function StorySetChapterItemCtrl:OnEnable()
end
function StorySetChapterItemCtrl:OnDisable()
if self.unlockTimer ~= nil then
self.unlockTimer:Cancel()
self.unlockTimer = nil
end
end
function StorySetChapterItemCtrl:OnDestroy()
end
function StorySetChapterItemCtrl:OnRelease()
end
function StorySetChapterItemCtrl:OnBtnClick_AAA()
end
function StorySetChapterItemCtrl:OnEvent_AAA()
end
return StorySetChapterItemCtrl
+259
View File
@@ -0,0 +1,259 @@
local StorySetCtrl = class("StorySetCtrl", BaseCtrl)
StorySetCtrl._mapNodeConfig = {
TopBar = {
sNodeName = "TopBarPanel",
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
},
imgBgPanel = {},
imgBgChapter = {sComponentName = "Image"},
goList = {sNodeName = "---List---"},
chapterLsv = {
sComponentName = "LoopScrollView"
},
goInfo = {sNodeName = "---Info---"},
imgChapterIcon = {sComponentName = "Image"},
txtTitle = {sComponentName = "TMP_Text"},
txtChapter = {sComponentName = "TMP_Text"},
sectionLsv = {
sComponentName = "LoopScrollView"
}
}
StorySetCtrl._mapEventConfig = {
[EventId.UIBackConfirm] = "OnEvent_Back",
[EventId.UIHomeConfirm] = "OnEvent_BackHome",
[EventId.TransAnimOutClear] = "OnEvent_TransAnimOutClear",
ReceiveStorySetRewardSuc = "OnEvent_ReceiveStorySetRewardSuc",
StorySetChapterRefresh = "OnEvent_StorySetChapterRefresh"
}
StorySetCtrl._mapRedDotConfig = {}
local panelType_chapter = 1
local panelType_Section = 2
function StorySetCtrl:Refresh()
if self.nPanelType == panelType_chapter then
self.animRoot:Play("StorySetPanel_Switch_List", 0, 0)
self:RefreshChapter()
elseif self.nPanelType == panelType_Section then
self.animRoot:Play("StorySetPanel_Switch_Info", 0, 0)
self:RefreshSection()
end
end
function StorySetCtrl:RefreshChapter()
self._mapNode.goList.gameObject:SetActive(true)
self._mapNode.goInfo.gameObject:SetActive(false)
for nInstanceId, v in pairs(self.tbChapterGrid) do
self:UnbindCtrlByNode(v)
self.tbChapterGrid[nInstanceId] = nil
end
if #self.tbChapter == 0 then
self._mapNode.chapterLsv:Init(4, self, self.OnRefreshChapterGrid, self.OnChapterGridClick)
else
self._mapNode.chapterLsv:Init(#self.tbChapter, self, self.OnRefreshChapterGrid, self.OnChapterGridClick, true)
if self.bLocation then
self.bLocation = false
local nNewIndex = 0
for k, v in ipairs(self.tbChapter) do
if v ~= nil and v.bUnlock then
local nChapterId = v.nId
local mapCfg = ConfigTable.GetData("StorySetChapter", nChapterId)
if mapCfg ~= nil and mapCfg.IsShow then
nNewIndex = k
end
end
end
if 0 < nNewIndex then
self._mapNode.chapterLsv:SetScrollGridPos(nNewIndex - 1, 0.5, 0)
end
end
end
end
function StorySetCtrl:OnRefreshChapterGrid(goGrid, gridIndex)
local nIndex = gridIndex + 1
local data = self.tbChapter[nIndex]
local nInstanceId = goGrid:GetInstanceID()
if not self.tbChapterGrid[nInstanceId] then
self.tbChapterGrid[nInstanceId] = self:BindCtrlByNode(goGrid, "Game.UI.StorySet.StorySetChapterItemCtrl")
end
self.tbChapterGrid[nInstanceId]:RefreshItem(data)
end
function StorySetCtrl:OnChapterGridClick(goGrid, gridIndex)
local nIndex = gridIndex + 1
local nInstanceId = goGrid:GetInstanceID()
local data = self.tbChapter[nIndex]
if data == nil then
return
end
local mapCfg = ConfigTable.GetData("StorySetChapter", data.nId)
if mapCfg ~= nil then
if not mapCfg.IsShow then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("StorySet_Chapter_Empty"))
return
end
if not data.bUnlock then
if mapCfg.LockText ~= "" then
EventManager.Hit(EventId.OpenMessageBox, mapCfg.LockText)
else
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("StorySet_Chapter_Lock"))
end
return
end
end
local nAnimLen = 0
if self.tbChapterGrid[nInstanceId] ~= nil then
nAnimLen = self.tbChapterGrid[nInstanceId]:PlayAnim(false)
end
self.nSelectIndex = nIndex
self.bResetLsvPos = true
self.nPanelType = panelType_Section
CS.WwiseAudioManager.Instance:PlaySound("ui_mainline_story_menu")
if 0 < nAnimLen then
self:AddTimer(1, nAnimLen, function()
self:Refresh()
end, true, true, true)
EventManager.Hit(EventId.TemporaryBlockInput, nAnimLen)
else
self:Refresh()
end
end
function StorySetCtrl:RefreshSection()
self._mapNode.goList.gameObject:SetActive(false)
self._mapNode.goInfo.gameObject:SetActive(true)
for nInstanceId, v in pairs(self.tbSectionGrid) do
self:UnbindCtrlByNode(v)
self.tbSectionGrid[nInstanceId] = nil
end
local data = self.tbChapter[self.nSelectIndex]
if nil ~= data then
self.tbSectionList = data.tbSectionList
self._mapNode.sectionLsv:Init(#self.tbSectionList, self, self.OnRefreshSectionGrid, self.OnSectionGridClick, not self.bResetLsvPos)
local mapChapterCfg = ConfigTable.GetData("StorySetChapter", data.nId)
if mapChapterCfg ~= nil then
self:SetPngSprite(self._mapNode.imgChapterIcon, "Icon/MapEpisode/" .. mapChapterCfg.Image)
self:SetPngSprite(self._mapNode.imgBgChapter, "Icon/MapEpisode/" .. mapChapterCfg.Bg)
NovaAPI.SetTMPText(self._mapNode.txtTitle, ConfigTable.GetUIText("StorySet_Title") .. mapChapterCfg.Title)
NovaAPI.SetTMPText(self._mapNode.txtChapter, mapChapterCfg.Name)
end
end
self.bResetLsvPos = false
end
function StorySetCtrl:OnRefreshSectionGrid(goGrid, gridIndex)
local nIndex = gridIndex + 1
local data = self.tbSectionList[nIndex]
local nInstanceId = goGrid:GetInstanceID()
if not self.tbSectionGrid[nInstanceId] then
self.tbSectionGrid[nInstanceId] = self:BindCtrlByNode(goGrid, "Game.UI.StorySet.StorySetSectionItemCtrl")
end
self.tbSectionGrid[nInstanceId]:RefreshItem(data)
end
function StorySetCtrl:OnSectionGridClick(goGrid, gridIndex)
local nIndex = gridIndex + 1
local data = self.tbSectionList[nIndex]
if data.nStatus == AllEnum.StorySetStatus.Lock then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("StorySet_Section_Lock_Tip"))
return
end
local mapCfg = ConfigTable.GetData("StorySetSection", data.nId)
if mapCfg ~= nil then
local avgEndCallback = function()
EventManager.Hit(EventId.ClosePanel, PanelId.PureAvgStory)
self.bGetReward = false
self.bTransitionEnd = false
if data.nStatus == AllEnum.StorySetStatus.UnLock then
PlayerData.StorySet:ReceiveStorySetReward(mapCfg.ChapterId, data.nId, function(netMsg)
self.bGetReward = true
self.tbReward = netMsg
end)
end
end
local mapData = {
nType = AllEnum.StoryAvgType.Plot,
sAvgId = mapCfg.AVGId,
nNodeId = nil,
callback = avgEndCallback
}
EventManager.Hit(EventId.OpenPanel, PanelId.PureAvgStory, mapData)
end
end
function StorySetCtrl:ShowGetReward()
if self.bGetReward and self.tbReward ~= nil and self.bTransitionEnd then
UTILS.OpenReceiveByChangeInfo(self.tbReward, function()
self.tbChapter = PlayerData.StorySet:GetAllChapterList()
if self.nPanelType == panelType_Section then
self:RefreshSection()
end
end)
self.bGetReward = false
self.tbReward = nil
self.bTransitionEnd = false
end
end
function StorySetCtrl:Awake()
self.nSelectIndex = 0
self.nPanelType = panelType_chapter
self.bResetLsvPos = true
local tbParam = self:GetPanelParam()
if type(tbParam) == "table" then
self.bLocation = tbParam[1]
end
end
function StorySetCtrl:OnEnable()
self.tbChapterGrid = {}
self.tbSectionGrid = {}
self.tbChapter = PlayerData.StorySet:GetAllChapterList()
self.animRoot = self.gameObject:GetComponent("Animator")
self:Refresh()
self.animRoot:Play("StorySetPanel_in", 0, 0)
end
function StorySetCtrl:OnDisable()
for _, v in pairs(self.tbChapterGrid) do
self:UnbindCtrlByNode(v)
end
self.tbChapterGrid = {}
for _, v in pairs(self.tbSectionGrid) do
self:UnbindCtrlByNode(v)
end
self.tbSectionGrid = {}
end
function StorySetCtrl:OnDestroy()
end
function StorySetCtrl:OnRelease()
end
function StorySetCtrl:OnEvent_Back(nPanelId)
if self._panel._nPanelId ~= nPanelId then
return
end
if self.nPanelType == panelType_Section then
self.bResetLsvPos = true
self.nPanelType = panelType_chapter
self:Refresh()
else
EventManager.Hit(EventId.CloesCurPanel)
end
end
function StorySetCtrl:OnEvent_BackHome(nPanelId)
if self._panel._nPanelId ~= nPanelId then
return
end
PanelManager.Home()
end
function StorySetCtrl:OnEvent_TransAnimOutClear()
self.bTransitionEnd = true
self:ShowGetReward()
end
function StorySetCtrl:OnEvent_ReceiveStorySetRewardSuc()
self:ShowGetReward()
end
function StorySetCtrl:OnEvent_StorySetChapterRefresh()
if self.bSendMsg then
return
end
self.bSendMsg = true
local serverCallback = function()
self.tbChapter = PlayerData.StorySet:GetAllChapterList()
self.bSendMsg = false
if self.nPanelType == panelType_chapter then
self:RefreshChapter()
end
end
PlayerData.StorySet:SendGetStorySetData(serverCallback)
end
return StorySetCtrl
+20
View File
@@ -0,0 +1,20 @@
local StorySetPanel = class("StorySetPanel", BasePanel)
StorySetPanel._tbDefine = {
{
sPrefabPath = "Play_StorySet/StorySetPanel.prefab",
sCtrlName = "Game.UI.StorySet.StorySetCtrl"
}
}
function StorySetPanel:Awake()
end
function StorySetPanel:OnEnable()
end
function StorySetPanel:OnAfterEnter()
end
function StorySetPanel:OnDisable()
end
function StorySetPanel:OnDestroy()
end
function StorySetPanel:OnRelease()
end
return StorySetPanel
@@ -0,0 +1,69 @@
local StorySetSectionItemCtrl = class("StorySetSectionItemCtrl", BaseCtrl)
StorySetSectionItemCtrl._mapNodeConfig = {
goCanvasGroup = {
sComponentName = "CanvasGroup"
},
goUnlock = {},
txtTitle = {sComponentName = "TMP_Text"},
txtDesc = {sComponentName = "TMP_Text"},
txtItemCount = {nCount = 2, sComponentName = "TMP_Text"},
imgItem = {nCount = 2, sComponentName = "Image"},
goRedDot = {},
goLock = {},
txtTitleLock = {
sComponentName = "TMP_Text",
sLanguageId = "StorySet_Section_Lock"
},
txtReward = {
sComponentName = "TMP_Text",
sLanguageId = "CharacterRelation_Plot_Reward"
}
}
StorySetSectionItemCtrl._mapEventConfig = {}
StorySetSectionItemCtrl._mapRedDotConfig = {}
function StorySetSectionItemCtrl:RefreshItem(data)
local nId = data.nId
local nChapterId = 0
local nStatus = data.nStatus
self._mapNode.goUnlock.gameObject:SetActive(nStatus ~= AllEnum.StorySetStatus.Lock)
self._mapNode.goLock.gameObject:SetActive(nStatus == AllEnum.StorySetStatus.Lock)
NovaAPI.SetCanvasGroupAlpha(self._mapNode.goCanvasGroup, nStatus == AllEnum.StorySetStatus.Lock and 0.8 or 1)
local mapCfg = ConfigTable.GetData("StorySetSection", nId)
if mapCfg ~= nil then
NovaAPI.SetTMPText(self._mapNode.txtTitle, mapCfg.Title)
NovaAPI.SetTMPText(self._mapNode.txtDesc, mapCfg.Desc)
nChapterId = mapCfg.ChapterId
end
for _, v in ipairs(self._mapNode.txtItemCount) do
v.gameObject:SetActive(nStatus ~= AllEnum.StorySetStatus.Received)
NovaAPI.SetTMPText(v, string.format("x%s", mapCfg.RewardItem1Qty))
end
if nStatus == AllEnum.StorySetStatus.UnLock then
local mapItemCfg = ConfigTable.GetData_Item(mapCfg.RewardItem1Tid)
if mapItemCfg ~= nil then
for _, v in ipairs(self._mapNode.imgItem) do
self:SetPngSprite(v, mapItemCfg.Icon)
end
end
end
RedDotManager.RegisterNode(RedDotDefine.Story_Set_Section, {nChapterId, nId}, self._mapNode.goRedDot, nil, nil, true)
end
function StorySetSectionItemCtrl:Awake()
end
function StorySetSectionItemCtrl:FadeIn()
end
function StorySetSectionItemCtrl:FadeOut()
end
function StorySetSectionItemCtrl:OnEnable()
end
function StorySetSectionItemCtrl:OnDisable()
end
function StorySetSectionItemCtrl:OnDestroy()
end
function StorySetSectionItemCtrl:OnRelease()
end
function StorySetSectionItemCtrl:OnBtnClick_AAA()
end
function StorySetSectionItemCtrl:OnEvent_AAA()
end
return StorySetSectionItemCtrl