235 lines
5.7 KiB
C#
235 lines
5.7 KiB
C#
using cfg;
|
|
using cfg.ActorCfg;
|
|
using Framework;
|
|
using Gameplay.Common;
|
|
using Gameplay.Net;
|
|
using NLDPB;
|
|
using System;
|
|
|
|
namespace Gameplay
|
|
{
|
|
/// <summary>
|
|
/// 邮件信息
|
|
/// </summary>
|
|
public class MailInfo
|
|
{
|
|
/// <summary>
|
|
/// 实例id
|
|
/// </summary>
|
|
private ulong id;
|
|
/// <summary>
|
|
/// 邮件模板配置数据
|
|
/// </summary>
|
|
private DataMail mCfg;
|
|
/// <summary>
|
|
/// 邮件服务器数据
|
|
/// </summary>
|
|
private Mail mailServer;
|
|
/// <summary>
|
|
/// 邮件发送时间
|
|
/// </summary>
|
|
private DateTime sendTime;
|
|
/// <summary>
|
|
/// 到期时间
|
|
/// </summary>
|
|
private DateTime overTime;
|
|
/// <summary>
|
|
/// 邮件逻辑状态
|
|
/// </summary>
|
|
private MailStatus mailStatus;
|
|
/// <summary>
|
|
/// 显示状态
|
|
/// </summary>
|
|
private E_MailDisplayStatus displayStatus;
|
|
/// <summary>
|
|
/// 红点节点
|
|
/// </summary>
|
|
private RedPointNode _redPointNode;
|
|
|
|
#region 属性
|
|
public ulong Id
|
|
{
|
|
get { return id; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// 邮件状态
|
|
/// </summary>
|
|
public MailStatus EStatus
|
|
{
|
|
get { return mailStatus; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// 邮件发送时间
|
|
/// </summary>
|
|
public DateTime SendTime
|
|
{
|
|
get { return sendTime; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// 到期时间
|
|
/// </summary>
|
|
public DateTime OverTime
|
|
{
|
|
get { return overTime; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// 配置数据
|
|
/// </summary>
|
|
public DataMail Cfg
|
|
{
|
|
get { return mCfg; }
|
|
}
|
|
|
|
public Mail MailServer
|
|
{
|
|
get { return mailServer; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// 显示状态
|
|
/// </summary>
|
|
public E_MailDisplayStatus DisplayStatus
|
|
{
|
|
get { return displayStatus; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// 邮件是否附带道具
|
|
/// </summary>
|
|
public bool IsHaveItem
|
|
{
|
|
get
|
|
{
|
|
if (mailServer.MailData == null)
|
|
return false;
|
|
|
|
return mailServer.MailData.Items.Count > 0;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 是否可以领取
|
|
/// </summary>
|
|
public bool IsHaveClaim
|
|
{
|
|
get
|
|
{
|
|
if (displayStatus == E_MailDisplayStatus.ReadAndNotClaim)
|
|
return true;
|
|
|
|
if (displayStatus == E_MailDisplayStatus.NoReadAndHaveItem)
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 是否领取过邮件奖励
|
|
/// </summary>
|
|
public bool IsGetClaim
|
|
{
|
|
get { return EStatus == MailStatus.Cliamed; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// 红点节点
|
|
/// </summary>
|
|
public RedPointNode RedPointNode
|
|
{
|
|
get { return _redPointNode; }
|
|
}
|
|
#endregion
|
|
|
|
public MailInfo(Mail mail)
|
|
{
|
|
Refresh(mail);
|
|
|
|
_redPointNode = RedPointManager.Instance.AddDynamicNode(cfg.RedPoint.NodeType.Normal, 20, mCfg.Id);
|
|
}
|
|
|
|
public void Refresh(Mail mail)
|
|
{
|
|
mCfg = TableManager.Instance.Tables.MailCfg.GetOrDefault((int)mail.MailID);
|
|
if (mCfg == null)
|
|
{
|
|
DebugUtil.LogError($"邮件配置没有id为{mail.MailID}");
|
|
mCfg = TableManager.Instance.Tables.MailCfg.DataList[0];
|
|
}
|
|
|
|
id = mail.Id;
|
|
mailServer = mail;
|
|
mailStatus = (MailStatus)mail.Status;
|
|
sendTime = CommonUtils.GetTimeByTimestamp(mail.SendTime);
|
|
overTime = sendTime.AddDays(GLConfig.Inst.data.MailDays);
|
|
|
|
RefreshMailDisplayStatus(mailStatus);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置邮件逻辑状态
|
|
/// </summary>
|
|
/// <param name="stu"></param>
|
|
public void SetStatus(MailStatus status)
|
|
{
|
|
if (status == mailStatus)
|
|
return;
|
|
|
|
mailStatus = status;
|
|
|
|
RefreshMailDisplayStatus(mailStatus);
|
|
|
|
EventManager.Instance.Send(EventManager.EventName.MailStateChange);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 刷新显示相关状态
|
|
/// </summary>
|
|
/// <param name="status"></param>
|
|
private void RefreshMailDisplayStatus(MailStatus mailStatus)
|
|
{
|
|
if (MailStatus.New == mailStatus)
|
|
{
|
|
displayStatus = IsHaveItem ? E_MailDisplayStatus.NoReadAndHaveItem : E_MailDisplayStatus.NoReadAndNoItem;
|
|
|
|
return;
|
|
}
|
|
|
|
if (MailStatus.Opened == mailStatus)
|
|
{
|
|
displayStatus = IsHaveItem ? E_MailDisplayStatus.ReadAndNotClaim : E_MailDisplayStatus.ReadAndClaim;
|
|
|
|
return;
|
|
}
|
|
|
|
displayStatus = E_MailDisplayStatus.ReadAndClaim;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 邮件显示状态
|
|
/// </summary>
|
|
public enum E_MailDisplayStatus
|
|
{
|
|
/// <summary>
|
|
/// 没有读取也没有道具
|
|
/// </summary>
|
|
NoReadAndNoItem,
|
|
/// <summary>
|
|
/// 没有读取但是有道具
|
|
/// </summary>
|
|
NoReadAndHaveItem,
|
|
/// <summary>
|
|
/// 读取但是没有领取
|
|
/// </summary>
|
|
ReadAndNotClaim,
|
|
/// <summary>
|
|
/// 读取并领取
|
|
/// </summary>
|
|
ReadAndClaim,
|
|
}
|
|
} |