Files
SL1900 86d82306fe Update - 1.7.0.88
EN: 1.7.0.88
CN: 1.7.0.90
JP: 1.7.0.91
KR: 1.7.0.94
2026-02-24 22:00:00 +09:00

166 lines
6.3 KiB
Lua

local BaseCtrl = require("GameCore.UI.BaseCtrl")
local CharFavourTaskCtrl = class("CharFavourTaskCtrl", BaseCtrl)
local FavourTaskState = {
Complete = 1,
NotComplete = 2,
Received = 3
}
CharFavourTaskCtrl._mapNodeConfig = {
anit_window_01 = {
sNodeName = "t_window_01",
sComponentName = "Animator"
},
got_fullscreen_blur_black = {
sNodeName = "t_fullscreen_blur_black",
sComponentName = "GameObject"
},
btnsnapshot = {
sNodeName = "snapshot",
sComponentName = "Button",
callback = "OnBtn_ClickClose"
},
loopTaskList = {
sNodeName = "TaskList",
sComponentName = "LoopScrollView"
},
btnClose = {
sNodeName = "btnClose",
sComponentName = "UIButton",
callback = "OnBtn_ClickClose"
},
btnReceive = {
sComponentName = "UIButton",
callback = "OnBtn_ClickGetReward"
},
btnReceived = {
sComponentName = "UIButton",
callback = "OnBtn_ClickCantReward"
},
txtBtnReceive = {
sComponentName = "TMP_Text",
sLanguageId = "Affinity_Task_Receive"
},
txtBtnReceived = {
sComponentName = "TMP_Text",
sLanguageId = "Affinity_Task_Receive"
},
txtWindowTitle = {
sComponentName = "TMP_Text",
sLanguageId = "Affinity_Task_Title"
},
imgCharIcon = {sComponentName = "Image"}
}
CharFavourTaskCtrl._mapEventConfig = {
[EventId.AffinityQuestReceived] = "OnEvent_AffinityQuestReceived"
}
function CharFavourTaskCtrl:Awake()
local tbParam = self:GetPanelParam()
self.curCharId = tbParam[1]
end
function CharFavourTaskCtrl:OnEnable()
self._mapNode.anit_window_01:Play("t_window_04_t_in")
self._mapNode.got_fullscreen_blur_black:SetActive(true)
local nCharSkinId = PlayerData.Char:GetCharUsedSkinId(self.curCharId)
local mapCharSkin = ConfigTable.GetData_CharacterSkin(nCharSkinId)
if mapCharSkin ~= nil then
self:SetPngSprite(self._mapNode.imgCharIcon, mapCharSkin.Icon, AllEnum.CharHeadIconSurfix.S)
end
self:OnRefreshTaskList()
end
function CharFavourTaskCtrl:OnRefreshTaskList()
self.bHasCompleteTask = false
self.TaskData = {}
local affinityData = PlayerData.Char:GetCharAffinityData(self.curCharId)
for k, v in pairs(affinityData.Quest.List) do
local questData = PlayerData.Quest:GetAffinityQuestData(v.Id)
local state = questData ~= nil and questData.nStatus or v.Status
if state == 0 then
state = FavourTaskState.NotComplete
elseif state == 1 then
state = FavourTaskState.Complete
self.bHasCompleteTask = true
else
state = FavourTaskState.Received
end
local progressData = {}
if state ~= FavourTaskState.Received then
progressData.Cur = questData ~= nil and questData.nCurProgress or v.Progress[1].Cur
progressData.Max = questData ~= nil and questData.nGoal or v.Progress[1].Max
else
progressData.Cur = 1
progressData.Max = 1
end
local data = {
taskData = ConfigTable.GetData("AffinityQuest", v.Id),
progress = progressData,
taskState = state
}
table.insert(self.TaskData, data)
end
self._mapNode.btnReceived.gameObject:SetActive(not self.bHasCompleteTask)
self._mapNode.btnReceive.gameObject:SetActive(self.bHasCompleteTask)
table.sort(self.TaskData, function(a, b)
if a.taskState ~= b.taskState then
return a.taskState < b.taskState
else
return a.taskData.SortId < b.taskData.SortId
end
end)
self._mapNode.loopTaskList:SetAnim(0.07)
self._mapNode.loopTaskList:Init(#self.TaskData, self, self.OnRefreshTaskGrid)
end
function CharFavourTaskCtrl:OnRefreshTaskGrid(goGrid, gridIndex)
local index = gridIndex + 1
local goGridTrans = goGrid.transform:Find("AnimRoot/Root")
local txtRewardCount = goGridTrans:Find("txtHeartCount"):GetComponent("TMP_Text")
local goReceived = goGrid.transform:Find("AnimRoot/imgReceived")
local txtReceived = goReceived:Find("txtReceived"):GetComponent("TMP_Text")
NovaAPI.SetTMPText(txtReceived, ConfigTable.GetUIText("CharPlot_Task_Received"))
local imgReceiveMask = goGrid.transform:Find("AnimRoot/imgReceiveMask")
local txtTaskDescReceived = goGridTrans:Find("txtTaskDescReceived"):GetComponent("TMP_Text")
local txtTaskDesc = goGridTrans:Find("txtTaskDesc"):GetComponent("TMP_Text")
local sldTask = goGridTrans:Find("sldTask"):GetComponent("Slider")
local txtTaskProgress = goGridTrans:Find("sldTask/txtTaskProgress"):GetComponent("TMP_Text")
local imgTaskState1 = goGridTrans:Find("imgTaskState1")
local imgTaskState2 = goGridTrans:Find("imgTaskState2")
local imgTaskState3 = goGridTrans:Find("imgTaskState3")
local data = self.TaskData[index]
imgTaskState1.gameObject:SetActive(data.taskState == FavourTaskState.NotComplete)
imgTaskState2.gameObject:SetActive(data.taskState == FavourTaskState.Complete)
imgTaskState3.gameObject:SetActive(data.taskState == FavourTaskState.Received)
NovaAPI.SetSliderValue(sldTask, data.taskState == FavourTaskState.NotComplete and data.progress.Cur / data.progress.Max or 1)
local progressTxt = data.progress.Cur .. "/" .. data.progress.Max
NovaAPI.SetTMPText(txtTaskProgress, data.taskState == FavourTaskState.NotComplete and progressTxt or ConfigTable.GetUIText("Quest_Complete"))
NovaAPI.SetTMPText(txtRewardCount, data.taskData.AffinityExp)
NovaAPI.SetTMPText(txtTaskDescReceived, UTILS.ParseParamDesc(data.taskData.Desc, data.taskData))
NovaAPI.SetTMPText(txtTaskDesc, UTILS.ParseParamDesc(data.taskData.Desc, data.taskData))
txtTaskDesc.gameObject:SetActive(data.taskState ~= FavourTaskState.Received)
txtTaskDescReceived.gameObject:SetActive(data.taskState == FavourTaskState.Received)
goReceived.gameObject:SetActive(data.taskState == FavourTaskState.Received)
imgReceiveMask.gameObject:SetActive(data.taskState == FavourTaskState.Received)
end
function CharFavourTaskCtrl:OnBtn_ClickCantReward()
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Affinity_Reward_Tips"))
end
function CharFavourTaskCtrl:OnBtn_ClickGetReward()
local data = {}
for k, v in ipairs(self.TaskData) do
if v.taskState == FavourTaskState.Complete then
table.insert(data, v.taskData.Id)
end
end
PlayerData.Quest:ReceiveAffinityReward(data, self.curCharId)
end
function CharFavourTaskCtrl:OnBtn_ClickClose()
self._mapNode.anit_window_01:Play("t_window_04_t_out")
self._mapNode.got_fullscreen_blur_black:SetActive(false)
self:AddTimer(1, 0.3, "OnCloseAnimFinish", true, true, true)
end
function CharFavourTaskCtrl:OnCloseAnimFinish()
EventManager.Hit(EventId.ClosePanel, PanelId.CharFavourTask)
end
function CharFavourTaskCtrl:OnEvent_AffinityQuestReceived()
self:OnRefreshTaskList()
end
return CharFavourTaskCtrl