c1_lua/lua/app/userdata/mail/mail_entity.lua
2023-05-19 21:55:40 +08:00

173 lines
3.9 KiB
Lua

local MailEntity = class("MailEntity", BaseData)
function MailEntity:ctor(info)
info = info or GConst.EMPTY_TABLE
self.id = info.id or 0
self.createTime = GFunc.formatTimeStep(info.create_at)
self.mailExpire = GFunc.formatTimeStep(info.expire + info.create_at)
self.state = info.state or GConst.MailConst.MAIL_TYPE.NOT_READ
self.mailType = GConst.MailConst.MAIL_TYPE.CUSTOM
self.mailCfgId = nil -- 可能为空
self.title = json.decode(info.title or "{}")
self.body = json.decode(info.body or "{}")
self.rewards = info.rewards or {}
-- 处理一下格式
for i, v in ipairs(self.rewards) do
v.num = v.count
end
self.data.isDirty = false
if self.title.key then
local cfg = ConfigManager:getConfig("mail")[self.title.key]
if cfg then
self.mailCfgId = self.title.key
self.mailType = cfg.type
end
end
end
function MailEntity:setDirty()
self.data.isDirty = not self.data.isDirty
end
function MailEntity:getId()
return self.id
end
function MailEntity:notRead()
return self.state == GConst.MailConst.MAIL_STATE.NOT_READ
end
function MailEntity:isRead()
return self.state == GConst.MailConst.MAIL_STATE.READED
end
function MailEntity:readThis()
if self:isReceived() then
return
end
self.state = GConst.MailConst.MAIL_STATE.READED
end
function MailEntity:isReceived()
return self.state == GConst.MailConst.MAIL_STATE.RECEIVED
end
function MailEntity:receivedThis()
self.state = GConst.MailConst.MAIL_STATE.RECEIVED
end
function MailEntity:getState()
return self.state
end
function MailEntity:getMailName()
if self.mailCfgId then
return I18N:getConfig("mail")[self.mailCfgId].name
else
local language = I18N:getCurLanguage()
if self.title.content then
return self.title.content[language] or GConst.EMPTY_STRING
elseif self.title.raw then
return self.title.raw
else
return GConst.EMPTY_STRING
end
end
end
function MailEntity:getMailDesc()
if self.mailCfgId then
return I18N:getConfig("mail")[self.mailCfgId].desc
else
local language = I18N:getCurLanguage()
if self.body.content then
return self.body.content[language] or GConst.EMPTY_STRING
elseif self.body.raw then
return self.body.raw
else
return GConst.EMPTY_STRING
end
end
end
function MailEntity:getMailExpire()
return self.mailExpire
end
function MailEntity:getRemainCd()
if not self.mailExpire then
return 0
end
local remainCd = self.mailExpire - Time:getServerTime()
if remainCd < 0 then
remainCd = 0
end
return remainCd
end
function MailEntity:getRemainCdStr()
local hour = self:getRemainCd() // 3600
if hour <= 0 then
hour = 1
end
return I18N:getGlobalText(I18N.GlobalConst.MAIL_COUNTDOWN, hour)
end
function MailEntity:getRewards()
return self.rewards
end
function MailEntity:haveReward()
return self:getRewards()[1] ~= nil
end
function MailEntity:getMailType()
return self.mailType
end
function MailEntity:getIsAdMail()
return self.mailType == GConst.MailConst.MAIL_TYPE.AD
end
function MailEntity:getIsNormalMail()
return self.mailType == GConst.MailConst.MAIL_TYPE.NORMAL
end
function MailEntity:canClaim()
if self:isOver() then
return false
end
if not self:getRewards()[1] then
return false
end
return not self:isReceived()
end
function MailEntity:isOver()
return self:getRemainCd() <= 0
end
function MailEntity:canDelete()
if self:isReceived() then
return true
end
if not self:haveReward() and self:isRead() then
return true
end
return false
end
function MailEntity:showNew()
if not self:notRead() then
return false
end
return self:getId() > DataManager.MailData:getLastMailId()
end
return MailEntity