Files
StellaSora_DataLua/lua/game/ui/mail/mailctrl.lua
T
SL1900 5e0d58cfad 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
2025-12-03 01:00:00 +09:00

720 lines
26 KiB
Lua

local MailCtrl = class("MailCtrl", BaseCtrl)
MailCtrl._mapNodeConfig = {
ImgBG = {sNodeName = "----BG----", sComponentName = "Image"},
TopBar = {
sNodeName = "TopBarPanel",
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
},
mainEmpty = {sComponentName = "GameObject"},
tex_empty = {
sComponentName = "TMP_Text",
sLanguageId = "Mail_EmptyTip"
},
mailItem = {sComponentName = "GameObject"},
mailItemSc = {
sComponentName = "LoopScrollView"
},
btnOneKeyReceive = {
sComponentName = "UIButton",
callback = "OneKeyReceive"
},
tex_OneKeyReceive = {
sComponentName = "TMP_Text",
sLanguageId = "Mail_OneKeyReceive"
},
btnOneKeyDel = {sComponentName = "UIButton", callback = "OneKeyDel"},
tex_OneKeyDel = {
sComponentName = "TMP_Text",
sLanguageId = "Mail_OneKeyDel"
},
texMailCount = {sComponentName = "TMP_Text"},
DetailPanel = {sComponentName = "GameObject"},
detailBg = {sComponentName = "GameObject"},
detailBgAnim = {sNodeName = "detailBg", sComponentName = "Animator"},
detailIcon = {sComponentName = "Image"},
detailTitle = {sComponentName = "TMP_Text"},
deadLine_Icon_1 = {sComponentName = "GameObject"},
deadLine_Icon_2 = {sComponentName = "GameObject"},
deadLine_Icon_3 = {sComponentName = "GameObject"},
detailDeadline = {sComponentName = "TMP_Text"},
detailSendTime = {sComponentName = "TMP_Text"},
detailSourceTitle = {
sComponentName = "TMP_Text",
sLanguageId = "Mail_Sender"
},
detailSource = {sComponentName = "TMP_Text"},
detailDesc = {sComponentName = "TMP_Text"},
detailDescSc = {sComponentName = "ScrollRect"},
detail_Link = {
sNodeName = "detailDesc",
sComponentName = "TMPHyperLink",
callback = "OnLinkClick_Word"
},
detailDesc2 = {sComponentName = "TMP_Text"},
detailDescSc2 = {sComponentName = "ScrollRect"},
detail_Link2 = {
sNodeName = "detailDesc2",
sComponentName = "TMPHyperLink",
callback = "OnLinkClick_Word"
},
detailItemRoot_2 = {sComponentName = "Transform"},
detailItemSc_2 = {sComponentName = "ScrollRect"},
detailItem = {sComponentName = "GameObject"},
detailItemEmpty = {sComponentName = "GameObject"},
detailBtnReceive = {
sComponentName = "UIButton",
callback = "OnClickDetailReceive"
},
tex_detailBtnReceive = {
sComponentName = "TMP_Text",
sLanguageId = "Mail_Receive"
},
detailBtnSurvery = {
sComponentName = "UIButton",
callback = "OnClickDetailSurvery"
},
tex_detailBtnSurvery = {
sComponentName = "TMP_Text",
sLanguageId = "Mail_Survery"
},
detailDeadlineBg = {sComponentName = "GameObject"},
detailClose = {
sComponentName = "UIButton",
callback = "OnCloseDetail"
},
btnBlur = {
sNodeName = "snapshot",
sComponentName = "Button",
callback = "OnCloseDetail"
},
btnCollect = {
sComponentName = "UIButton",
callback = "OnClick_Collect"
},
btnUnCollect = {
sComponentName = "UIButton",
callback = "OnClick_UnCollect"
}
}
MailCtrl._mapEventConfig = {
[EventId.RefrushMailView] = "SetMailGroup",
OnEvent_RefrushMailGroup = "RefrushMailGroup",
GetAllMailList = "OnGetAllMailList"
}
function MailCtrl:FadeIn()
EventManager.Hit(EventId.SetTransition)
end
function MailCtrl:Awake()
self.maxMailCount = ConfigTable.GetConfigNumber("MailMax")
self.detailMsg = nil
self.detailReadGo = nil
self.tbDetailItemCtrl2 = {}
self.tbDetailItemEmpty = {}
self.tbMailRewardCtrl = {}
self.tabCache = {}
self.isNeedRefList = false
end
function MailCtrl:OnEnable()
self._mapNode.detailItem.gameObject:SetActive(false)
local nId = CS.UnityEngine.SortingLayer.NameToID(AllEnum.SortingLayerName.UI)
if not self.isOpen then
self:SetMailGroup()
self.isOpen = true
end
local sFullPath = string.format("Image/UIBG/%s", "bg_common_03")
if self._mapNode and self._mapNode.ImgBG then
self:SetPngSprite(self._mapNode.ImgBG, sFullPath)
end
end
function MailCtrl:OnDisable()
RedDotManager.SetValid(RedDotDefine.Mail_UnRead, nil, false)
RedDotManager.SetValid(RedDotDefine.Mail_New, nil, false)
self.tbDetailItemEmpty = nil
for nIndex, objCtrl in pairs(self.tbDetailItemCtrl2) do
self:UnbindCtrlByNode(objCtrl)
self.tbDetailItemCtrl2[nIndex] = nil
end
self.tbDetailItemCtrl2 = {}
for nInstanceId, tbObjCtrl in pairs(self.tbMailRewardCtrl) do
for _, objCtrl in pairs(tbObjCtrl) do
self:UnbindCtrlByNode(objCtrl)
end
self.tbMailRewardCtrl[nInstanceId] = nil
end
self.tbMailRewardCtrl = {}
end
function MailCtrl:OnDestroy()
self.detailReadGo = nil
self.detailMsg = nil
self.tabCache = nil
self.isOpen = nil
PlayerData.Mail:CancelTimeDelay()
PlayerData.Mail:ClearFunCallBack()
end
function MailCtrl:SetMailGroup(isOpen)
self.mailCount = 0
local tab = PlayerData.Mail._mapMail
local currentTime = CS.ClientManager.Instance.serverTimeStamp
self.tabCache = {}
for i, v in pairs(tab) do
if v.Deadline == 0 or currentTime < v.Deadline then
self.mailCount = self.mailCount + 1
table.insert(self.tabCache, v)
end
end
table.sort(self.tabCache, function(a, b)
return a.Pin and not b.Pin or a.Pin == b.Pin and a.Time > b.Time
end)
if self.mailCount ~= 0 then
self._mapNode.mailItem:SetActive(true)
self._mapNode.mailItemSc:SetAnim(0.1)
self._mapNode.mailItemSc:Init(self.mailCount, self, self.RefreshGroupGrid)
NovaAPI.SetTMPText(self._mapNode.texMailCount, "<color=#08d3d4>" .. self.mailCount .. "</color><color=#fafafa>/" .. self.maxMailCount .. "</color>")
self._mapNode.mainEmpty:SetActive(false)
else
self._mapNode.mainEmpty:SetActive(true)
self._mapNode.mailItem:SetActive(false)
NovaAPI.SetTMPText(self._mapNode.texMailCount, "<color=#08d3d4>" .. self.mailCount .. "</color><color=#fafafa>/" .. self.maxMailCount .. "</color>")
end
if not isOpen then
self._mapNode.DetailPanel:SetActive(false)
end
end
function MailCtrl:RefrushMailGroup()
self._mapNode.DetailPanel:SetActive(false)
self:SetMailGroup()
end
function MailCtrl:RefreshGroupGrid(goGrid, gridIndex)
local nInstanceID = goGrid:GetInstanceID()
local nIndex = gridIndex + 1
local tempID = self.tabCache[nIndex].Id
local data = PlayerData.Mail._mapMail[tempID]
if data == nil then
return
end
local objMailImg = goGrid.transform:Find("AnimRoot"):GetComponent("Image")
local icon = goGrid.transform:Find("AnimRoot/iconMask/Icon"):GetComponent("Image")
local texTitle = goGrid.transform:Find("AnimRoot/texTitle"):GetComponent("TMP_Text")
local texSource = goGrid.transform:Find("AnimRoot/send/texSource"):GetComponent("TMP_Text")
local texTime = goGrid.transform:Find("AnimRoot/texTime"):GetComponent("TMP_Text")
local texDeadline = goGrid.transform:Find("AnimRoot/texDeadline"):GetComponent("TMP_Text")
local objDeadline_1 = goGrid.transform:Find("AnimRoot/texDeadline/objDeadline_1").gameObject
local objDeadline_2 = goGrid.transform:Find("AnimRoot/texDeadline/objDeadline_2").gameObject
local objDeadline_3 = goGrid.transform:Find("AnimRoot/texDeadline/objDeadline_3").gameObject
local attaCount = goGrid.transform:Find("AnimRoot/attaCount").gameObject
local texAttaCount = goGrid.transform:Find("AnimRoot/attaCount/texAttaCount"):GetComponent("TMP_Text")
local objGrey = goGrid.transform:Find("AnimRoot/objGrey").gameObject
local line_1 = goGrid.transform:Find("AnimRoot/line_1").gameObject
local objMainIconRead = goGrid.transform:Find("AnimRoot/objMainIconRead").gameObject
local objMainIconNotRead = goGrid.transform:Find("AnimRoot/objMainIconNotRead").gameObject
local objMainIconRecv = goGrid.transform:Find("AnimRoot/objMainIconRecv").gameObject
local objCollectMark = goGrid.transform:Find("AnimRoot/collectMark").gameObject
objCollectMark:SetActive(data.Pin)
if nil == self.tbMailRewardCtrl[nInstanceID] then
self.tbMailRewardCtrl[nInstanceID] = {}
local itemCtrl = self:BindCtrlByNode(goGrid.transform:Find("AnimRoot/item1").gameObject, "Game.UI.TemplateEx.TemplateItemCtrl")
self.tbMailRewardCtrl[nInstanceID][1] = itemCtrl
end
for _, v in ipairs(self.tbMailRewardCtrl[nInstanceID]) do
v.gameObject:SetActive(false)
end
local btnReceive = goGrid.transform:Find("AnimRoot/btnReceive"):GetComponent("UIButton")
local txtBtn = goGrid.transform:Find("AnimRoot/btnReceive/AnimRoot/txtBtn"):GetComponent("TMP_Text")
NovaAPI.SetTMPText(txtBtn, ConfigTable.GetUIText("Mail_Receive"))
local btnRead = goGrid.transform:Find("AnimRoot"):GetComponent("Button")
objGrey:SetActive(false)
line_1:SetActive(false)
btnReceive.gameObject:SetActive(false)
objMainIconRead:SetActive(false)
objMainIconNotRead:SetActive(false)
objMainIconRecv:SetActive(false)
objDeadline_1:SetActive(false)
objDeadline_2:SetActive(false)
objDeadline_3:SetActive(false)
local strTmpTitle = ""
if string.find(data.Subject, "MailTemplate") ~= nil then
local sList = string.split(data.Subject, ".")
if 2 <= #sList and tonumber(sList[2]) then
local dMsg = ConfigTable.GetData("MailTemplate", tonumber(sList[2]))
if dMsg then
strTmpTitle = dMsg.Subject
else
strTmpTitle = data.Subject
end
else
strTmpTitle = data.Subject
end
else
strTmpTitle = data.Subject
end
if data.SubjectArgs and #data.SubjectArgs > 0 then
NovaAPI.SetTMPText(texTitle, self:MailFormat(strTmpTitle, data.SubjectArgs))
else
NovaAPI.SetTMPText(texTitle, strTmpTitle)
end
if string.find(data.Author, "MailTemplate") ~= nil then
local sList = string.split(data.Author, ".")
if 2 <= #sList and tonumber(sList[2]) then
local dMsg = ConfigTable.GetData("MailTemplate", tonumber(sList[2]))
if dMsg then
NovaAPI.SetTMPText(texSource, ConfigTable.GetUIText("Mail_Sender") .. dMsg.Author)
else
NovaAPI.SetTMPText(texSource, ConfigTable.GetUIText("Mail_Sender") .. data.Author)
end
else
NovaAPI.SetTMPText(texSource, ConfigTable.GetUIText("Mail_Sender") .. data.Author)
end
else
NovaAPI.SetTMPText(texSource, ConfigTable.GetUIText("Mail_Sender") .. data.Author)
end
NovaAPI.SetTMPText(texTime, orderedFormat(ConfigTable.GetUIText("Mail_Time") or "", tonumber(os.date("%Y", data.Time)), tonumber(os.date("%m", data.Time)), tonumber(os.date("%d", data.Time))))
if data.TemplateId == 0 then
self:SetPngSprite(icon, "Icon/Head/head_999902" .. AllEnum.CharHeadIconSurfix.XL)
else
local mailTData = ConfigTable.GetData("MailTemplate", data.TemplateId)
self:SetPngSprite(icon, mailTData.Icon .. AllEnum.CharHeadIconSurfix.XL)
end
if data.Deadline ~= 0 then
local remainTime = data.Deadline - CS.ClientManager.Instance.serverTimeStamp
if 86400 <= remainTime then
NovaAPI.SetTMPText(texDeadline, "<color=#FEC254>" .. orderedFormat(ConfigTable.GetUIText("Mail_LeftTime_Day") or "", math.floor(remainTime / 86400)) .. "</color>")
objDeadline_1:SetActive(true)
elseif 3600 <= remainTime then
NovaAPI.SetTMPText(texDeadline, "<color=#FB8037>" .. orderedFormat(ConfigTable.GetUIText("Mail_LeftTime_Hour") or "", math.floor(remainTime / 3600)) .. "</color>")
objDeadline_2:SetActive(true)
else
NovaAPI.SetTMPText(texDeadline, "<color=#FF5579>" .. ConfigTable.GetUIText("Mail_LeftTime_LessThenHour") .. "</color>")
objDeadline_3:SetActive(true)
end
else
NovaAPI.SetTMPText(texDeadline, "")
end
if data.Attachments and 0 < #data.Attachments then
for i, v in ipairs(data.Attachments) do
if 1 < i then
break
end
if nil ~= self.tbMailRewardCtrl[nInstanceID][i] then
local itemCtrl = self.tbMailRewardCtrl[nInstanceID][i]
itemCtrl.gameObject:SetActive(true)
local itemCfg = ConfigTable.GetData_Item(v.Tid)
if itemCfg.Type == GameEnum.itemType.Char then
itemCtrl:SetChar(v.Tid, v.Qty, data.Recv)
else
itemCtrl:SetItem(v.Tid, nil, v.Qty, nil, data.Recv, false, false, true)
end
end
end
attaCount:SetActive(true)
NovaAPI.SetTMPText(texAttaCount, orderedFormat(ConfigTable.GetUIText("Mail_Attachment_Count") or "", #data.Attachments))
if data.Recv then
objMainIconRecv:SetActive(true)
objGrey:SetActive(true)
elseif data.Read then
objMainIconRead:SetActive(true)
btnReceive.gameObject:SetActive(true)
line_1:SetActive(true)
else
objMainIconNotRead:SetActive(true)
btnReceive.gameObject:SetActive(true)
line_1:SetActive(true)
end
else
attaCount:SetActive(false)
if data.Read then
objMainIconRecv:SetActive(true)
objGrey:SetActive(true)
else
objMainIconNotRead:SetActive(true)
line_1:SetActive(true)
end
end
local ReceiveCallBack = function()
self:SetMailGroup()
end
btnReceive.onClick:RemoveAllListeners()
local cbReceive = function()
self:OnClickReceive(data.Id, data.Flag, ReceiveCallBack)
end
btnReceive.onClick:AddListener(cbReceive)
local ReadCallBack = function()
self.isNeedRefList = true
local cacheData = PlayerData.Mail._mapMail[data.Id]
if cacheData then
self:OpenMailDetail(cacheData, goGrid)
end
end
btnRead.onClick:RemoveAllListeners()
local cbRead = function()
self:OnClickRead(data.Id, data.Flag, ReadCallBack, goGrid)
end
btnRead.onClick:AddListener(cbRead)
end
function MailCtrl:OpenMailDetail(data, goGrid)
self.detailMsg = data
self.detailReadGo = goGrid
local str = ""
for i = 1, #data.Desc do
local tmp = string.sub(data.Desc, i, i)
if tmp == "\\" then
else
str = str .. tmp
end
end
local haveAttachments = data.Attachments and #data.Attachments > 0
if haveAttachments then
self._mapNode.detailDescSc.gameObject:SetActive(true)
NovaAPI.SetComponentEnable(self._mapNode.detailDescSc, true)
self._mapNode.detailDescSc2.gameObject:SetActive(false)
self._mapNode.detailDeadlineBg.transform.localPosition = Vector3(320, -225, 0)
self._mapNode.detailItemSc_2.gameObject:SetActive(true)
else
self._mapNode.detailDescSc2.gameObject:SetActive(true)
NovaAPI.SetComponentEnable(self._mapNode.detailDescSc2, true)
self._mapNode.detailDescSc.gameObject:SetActive(false)
self._mapNode.detailDeadlineBg.transform.localPosition = Vector3(320, -370, 0)
self._mapNode.detailItemSc_2.gameObject:SetActive(false)
end
if string.find(str, "MailTemplate") ~= nil then
local sList = string.split(str, ".")
if 2 <= #sList and tonumber(sList[2]) then
local dMsg = ConfigTable.GetData("MailTemplate", tonumber(sList[2]))
if dMsg then
str = dMsg.Desc
end
end
end
if data.DescArgs and 0 < #data.DescArgs then
if data.TemplateId == 9999 then
local sId = data.DescArgs[1]
local mapPackageCfg = ConfigTable.GetData("MallPackage", sId, true)
local mapMonthCfg = ConfigTable.GetData("MallMonthlyCard", sId, true)
local mapGemCfg = ConfigTable.GetData("MallGem", sId, true)
local sBattlePass = PlayerData.BattlePass:GetBattlePassName(sId)
if mapPackageCfg then
data.DescArgs[1] = mapPackageCfg.DetailName
elseif mapMonthCfg then
data.DescArgs[1] = mapMonthCfg.Name
elseif mapGemCfg then
local bMaiden = data.DescArgs[3] == "1"
local nAll = bMaiden and mapGemCfg.MaidenBonusItemQty + mapGemCfg.BaseItemQty or mapGemCfg.ExperiencedBonusItemQty + mapGemCfg.BaseItemQty
data.DescArgs[1] = orderedFormat(mapGemCfg.Name, nAll)
data.DescArgs[3] = nil
elseif sBattlePass then
data.DescArgs[1] = sBattlePass
end
end
local tmpFormatStr = self:MailFormat(str, data.DescArgs)
if haveAttachments then
NovaAPI.SetTMPText(self._mapNode.detailDesc, tmpFormatStr)
else
NovaAPI.SetTMPText(self._mapNode.detailDesc2, tmpFormatStr)
end
elseif haveAttachments then
NovaAPI.SetTMPText(self._mapNode.detailDesc, str)
else
NovaAPI.SetTMPText(self._mapNode.detailDesc2, str)
end
if data.TemplateId == 0 then
self:SetPngSprite(self._mapNode.detailIcon, "Icon/Head/head_999902" .. AllEnum.CharHeadIconSurfix.XL)
else
local mailTData = ConfigTable.GetData("MailTemplate", data.TemplateId)
self:SetPngSprite(self._mapNode.detailIcon, mailTData.Icon .. AllEnum.CharHeadIconSurfix.XL)
end
local strTmpTitle = ""
if string.find(data.Subject, "MailTemplate") ~= nil then
local sList = string.split(data.Subject, ".")
if 2 <= #sList and tonumber(sList[2]) then
local dMsg = ConfigTable.GetData("MailTemplate", tonumber(sList[2]))
if dMsg then
strTmpTitle = dMsg.Subject
else
strTmpTitle = data.Subject
end
else
strTmpTitle = data.Subject
end
else
strTmpTitle = data.Subject
end
if data.SubjectArgs and 0 < #data.SubjectArgs then
NovaAPI.SetTMPText(self._mapNode.detailTitle, self:MailFormat(strTmpTitle, data.SubjectArgs))
else
NovaAPI.SetTMPText(self._mapNode.detailTitle, strTmpTitle)
end
self._mapNode.deadLine_Icon_1:SetActive(false)
self._mapNode.deadLine_Icon_2:SetActive(false)
self._mapNode.deadLine_Icon_3:SetActive(false)
if data.Deadline ~= 0 then
local remainTime = data.Deadline - CS.ClientManager.Instance.serverTimeStamp
if 86400 <= remainTime then
NovaAPI.SetTMPText(self._mapNode.detailDeadline, "<color=#FEC254>" .. orderedFormat(ConfigTable.GetUIText("Mail_LeftTime_Day") or "", math.floor(remainTime / 86400)) .. "</color>")
self._mapNode.deadLine_Icon_1:SetActive(true)
elseif 3600 <= remainTime then
NovaAPI.SetTMPText(self._mapNode.detailDeadline, "<color=#FB8037>" .. orderedFormat(ConfigTable.GetUIText("Mail_LeftTime_Hour") or "", math.floor(remainTime / 3600)) .. "</color>")
self._mapNode.deadLine_Icon_2:SetActive(true)
else
NovaAPI.SetTMPText(self._mapNode.detailDeadline, "<color=#FF5579>" .. ConfigTable.GetUIText("Mail_LeftTime_LessThenHour") .. "</color>")
self._mapNode.deadLine_Icon_3:SetActive(true)
end
else
NovaAPI.SetTMPText(self._mapNode.detailDeadline, "")
end
NovaAPI.SetTMPText(self._mapNode.detailSendTime, orderedFormat(ConfigTable.GetUIText("Mail_Time") or "", tonumber(os.date("%Y", data.Time)), tonumber(os.date("%m", data.Time)), tonumber(os.date("%d", data.Time))))
if string.find(data.Author, "MailTemplate") ~= nil then
local sList = string.split(data.Author, ".")
if 2 <= #sList and tonumber(sList[2]) then
local dMsg = ConfigTable.GetData("MailTemplate", tonumber(sList[2]))
if dMsg then
NovaAPI.SetTMPText(self._mapNode.detailSource, dMsg.Author)
else
NovaAPI.SetTMPText(self._mapNode.detailSource, data.Author)
end
else
NovaAPI.SetTMPText(self._mapNode.detailSource, data.Author)
end
else
NovaAPI.SetTMPText(self._mapNode.detailSource, data.Author)
end
for _, v in ipairs(self.tbDetailItemCtrl2) do
v.gameObject:SetActive(false)
end
for i, v in ipairs(self.tbDetailItemEmpty) do
destroy(v)
end
self.tbDetailItemEmpty = {}
local tmpObj = {}
if data.Attachments and #data.Attachments > 0 then
local nIndex = 1
for i, v in pairs(data.Attachments) do
local itemCtrl = self.tbDetailItemCtrl2[nIndex]
nIndex = nIndex + 1
if nil == itemCtrl then
local itemObj = instantiate(self._mapNode.detailItem, self._mapNode.detailItemRoot_2)
itemCtrl = self:BindCtrlByNode(itemObj, "Game.UI.TemplateEx.TemplateItemCtrl")
table.insert(self.tbDetailItemCtrl2, itemCtrl)
end
table.insert(tmpObj, itemCtrl)
local itemMsg = ConfigTable.GetData_Item(v.Tid)
if itemMsg.Type == GameEnum.itemType.Char then
itemCtrl:SetChar(v.Tid, v.Qty, data.Recv)
else
itemCtrl:SetItem(v.Tid, nil, v.Qty, nil, data.Recv, false, false, true)
end
local tmpRoot = itemCtrl.gameObject.transform:Find("root")
local btnSelect = tmpRoot:GetComponent("UIButton")
btnSelect.onClick:RemoveAllListeners()
local cbSelect = function()
self:ShowItemDetail(v.Tid, tmpRoot:GetComponent("RectTransform"))
end
btnSelect.onClick:AddListener(cbSelect)
end
local emptyCount = 6 - #data.Attachments
if 0 < emptyCount then
for i = 1, emptyCount do
local itemObj = instantiate(self._mapNode.detailItemEmpty, self._mapNode.detailItemRoot_2)
table.insert(self.tbDetailItemEmpty, itemObj)
table.insert(tmpObj, itemObj)
end
end
local wait = function()
self._mapNode.detailItemRoot_2.gameObject.transform:DOLocalMoveX(0, 0.1)
NovaAPI.SetComponentEnable(self._mapNode.detailItemSc_2, true)
coroutine.yield(CS.UnityEngine.WaitForSeconds(0.1))
if #data.Attachments < 6 then
NovaAPI.SetComponentEnable(self._mapNode.detailItemSc_2, false)
end
for i, v in pairs(tmpObj) do
v.gameObject:SetActive(true)
v.gameObject.transform:Find("root"):GetComponent("Animator"):Play("MailPanel_detailItem_in")
coroutine.yield(CS.UnityEngine.WaitForSeconds(0.03))
end
end
cs_coroutine.start(wait)
EventManager.Hit(EventId.TemporaryBlockInput, 0.1 + 0.03 * #tmpObj)
self._mapNode.detailBtnReceive.gameObject:SetActive(not data.Recv)
else
self._mapNode.detailBtnReceive.gameObject:SetActive(false)
end
self._mapNode.detailBtnReceive.gameObject:SetActive(data.SurveyId <= 0 and not data.Recv)
self._mapNode.detailBtnSurvery.gameObject:SetActive(data.SurveyId > 0)
self._mapNode.btnUnCollect.gameObject:SetActive(not data.Pin)
self._mapNode.btnCollect.gameObject:SetActive(data.Pin)
self.tmpPin = data.Pin
self._mapNode.DetailPanel:SetActive(true)
local wait1 = function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
self._mapNode.detailBg:SetActive(true)
self._mapNode.detailBgAnim:Play("t_window_04_t_in")
coroutine.yield(CS.UnityEngine.WaitForSeconds(0.2))
if haveAttachments then
if self._mapNode.detailDesc:GetComponent("RectTransform").sizeDelta.y < 320 then
NovaAPI.SetComponentEnable(self._mapNode.detailDescSc, false)
end
elseif self._mapNode.detailDesc2:GetComponent("RectTransform").sizeDelta.y < 500 then
NovaAPI.SetComponentEnable(self._mapNode.detailDescSc2, false)
end
end
cs_coroutine.start(wait1)
end
function MailCtrl:ShowItemDetail(id, rtIcon)
UTILS.ClickItemGridWithTips(id, rtIcon.transform, false, true, false)
end
function MailCtrl:OnCloseDetail()
local isChangePin = false
if self.detailMsg and self.detailMsg.Pin ~= self.tmpPin then
isChangePin = true
local cb = function()
self:SetMailGroup()
end
PlayerData.Mail:SendMailPin(self.detailMsg.Id, self.detailMsg.Flag, self.tmpPin, cb)
end
self.detailMsg = nil
self.detailReadGo = nil
if self.isNeedRefList and not isChangePin then
self:SetMailGroup()
end
self.isNeedRefList = false
local waitCallback = function()
self._mapNode.DetailPanel:SetActive(false)
self._mapNode.detailBg:SetActive(false)
end
self._mapNode.detailBgAnim:Play("t_window_04_t_out")
self:AddTimer(1, 0.2, waitCallback, true, true, true, nil)
end
function MailCtrl:OnClickReceive(id, flag, callBack)
PlayerData.Mail:SendMailRecvReq(id, flag, callBack)
end
function MailCtrl:OnClickDel(id, flag, callBack)
PlayerData.Mail:SendMailRemoveReq(id, flag, callBack)
end
function MailCtrl:OnClickRead(id, flag, callBack, goGrid)
local cacheData = PlayerData.Mail._mapMail[id]
if not cacheData.Read then
PlayerData.Mail:SendMailReadReq(id, flag, callBack)
else
self:OpenMailDetail(cacheData, goGrid)
end
end
function MailCtrl:OneKeyReceive()
local tab = PlayerData.Mail._mapMail
local currentTime = CS.ClientManager.Instance.serverTimeStamp
local _recMailCount = 0
for i, v in pairs(tab) do
if v.Deadline == 0 or currentTime < v.Deadline then
if not (not (0 < #v.Attachments) or v.Recv) or not v.Read then
_recMailCount = _recMailCount + 1
elseif #v.Attachments == 0 and not v.Read then
_recMailCount = _recMailCount + 1
end
end
end
if _recMailCount == 0 then
local sTip = ConfigTable.GetUIText("Mail_OneKeyReceiveTips")
EventManager.Hit(EventId.OpenMessageBox, sTip)
return
end
local cb = function()
self:SetMailGroup()
end
self:OnClickReceive(0, 0, cb)
end
function MailCtrl:OneKeyDel()
local tab = PlayerData.Mail._mapMail
local currentTime = CS.ClientManager.Instance.serverTimeStamp
local _delMailCount = 0
for i, v in pairs(tab) do
if v.Deadline == 0 or currentTime < v.Deadline then
if 0 < #v.Attachments and v.Recv and not v.Pin then
_delMailCount = _delMailCount + 1
elseif #v.Attachments == 0 and v.Read and not v.Pin then
_delMailCount = _delMailCount + 1
end
end
end
if _delMailCount == 0 then
local sTip = ConfigTable.GetUIText("Mail_OneKeyDelTips")
EventManager.Hit(EventId.OpenMessageBox, sTip)
return
end
local cb = function()
self:SetMailGroup()
end
self:OnClickDel(0, 0, cb)
end
function MailCtrl:OnClickDetailReceive()
local cb = function()
self:SetMailGroup(true)
local cacheData = PlayerData.Mail._mapMail[self.detailMsg.Id]
if cacheData == nil then
self:OnGetAllMailList()
return
end
if cacheData.Attachments and #cacheData.Attachments > 0 then
local nIndex = 1
for i, v in pairs(cacheData.Attachments) do
local itemCtrl = self.tbDetailItemCtrl2[nIndex]
nIndex = nIndex + 1
local itemMsg = ConfigTable.GetData_Item(v.Tid)
if itemMsg.Type == GameEnum.itemType.Char then
itemCtrl:SetChar(v.Tid, v.Qty, cacheData.Recv)
else
itemCtrl:SetItem(v.Tid, nil, v.Qty, nil, cacheData.Recv, false, false, true)
end
end
end
self._mapNode.detailBtnReceive.gameObject:SetActive(not cacheData.Recv)
end
self:OnClickReceive(self.detailMsg.Id, self.detailMsg.Flag, cb)
end
function MailCtrl:OnClick_Collect()
self._mapNode.btnUnCollect.gameObject:SetActive(true)
self._mapNode.btnCollect.gameObject:SetActive(false)
self.tmpPin = false
end
function MailCtrl:OnClick_UnCollect()
self._mapNode.btnUnCollect.gameObject:SetActive(false)
self._mapNode.btnCollect.gameObject:SetActive(true)
self.tmpPin = true
end
function MailCtrl:OnClickDetailSurvery()
local callBack = function(_, msgData)
self:SetMailGroup(true)
if msgData ~= nil and msgData.ActivityID ~= nil and msgData.NotifyUrl ~= nil then
local nUID = PlayerData.Base:GetPlayerId()
local SDKManager = CS.SDKManager.Instance
if SDKManager:IsSDKInit() then
SDKManager:ShowSurvey(msgData.ActivityID, nUID, msgData.NotifyUrl)
else
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Function_NotAvailable"))
end
end
end
PlayerData.Mail:SendMailGetSurveryMsg(self.detailMsg.SurveyId, callBack)
end
function MailCtrl:OnLinkClick_Word(link, sWordId)
NovaAPI.OpenURL(sWordId)
end
function MailCtrl:OnGetAllMailList()
local callback = function()
self:SetMailGroup()
end
PlayerData.Mail:SengMsgMailList(callback)
end
function MailCtrl:MailFormat(str, list)
local count = #list
if count == 1 then
return orderedFormat(str, list[1])
elseif count == 2 then
return orderedFormat(str, list[1], list[2])
elseif count == 3 then
return orderedFormat(str, list[1], list[2], list[3])
elseif count == 4 then
return orderedFormat(str, list[1], list[2], list[3], list[4])
elseif count == 5 then
return orderedFormat(str, list[1], list[2], list[3], list[4], list[5])
end
return str
end
return MailCtrl