using Framework; using Gameplay; using Gameplay.Common; using Gameplay.Net; using NLDPB; using PhxhSDK; using System.Collections.Generic; public class MailSystem : Singlenton, IInitable { /// /// 邮件数据字典 /// public Dictionary DicMail; public bool isHaveAll; public void Init() { DicMail = new Dictionary(); isHaveAll = false; EventManager.Instance.Register(EventManager.EventName.HaveNewMail, OnHaveNewMail); } public void Release() { EventManager.Instance.Unregister(EventManager.EventName.HaveNewMail, OnHaveNewMail); isHaveAll = false; DicMail.Clear(); } private void OnHaveNewMail() { NetHelper.RequestMailList(!Instance.isHaveAll); } public void RemoveMail(ulong id) { if (!DicMail.Remove(id)) DebugUtil.LogError($"移除id为{id}的邮件失败"); } /// /// 添加邮件 /// /// public void AddMail(Mail mail) { if (DicMail.TryGetValue(mail.Id, out MailInfo mailInfo)) mailInfo.Refresh(mail); else { if (DicMail.Count >= GLConfig.Inst.data.MaxMailCount) { MailInfo delectMail = null; // 待删除的邮件信息 foreach (MailInfo temp in DicMail.Values) { if (delectMail == temp) delectMail = temp; if (temp.EStatus < delectMail.EStatus) continue; if (temp.EStatus > delectMail.EStatus) { delectMail = temp; continue; } if (delectMail.SendTime < temp.SendTime) continue; if (delectMail.SendTime > temp.SendTime) { delectMail = temp; continue; } if (temp.Cfg.Id < delectMail.Cfg.Id) continue; if (temp.Cfg.Id > delectMail.Cfg.Id) { delectMail = temp; continue; } } if (delectMail != null) RemoveMail(delectMail.Id); } DicMail[mail.Id] = new(mail); Instance.isHaveAll = true; } } /// /// 设置邮件逻辑状态 /// /// /// public void SetStatus(ulong id, MailStatus status) { if (DicMail.TryGetValue(id, out MailInfo singleMail)) singleMail.SetStatus(status); } public void HandleIds(ulong id) { if (id == 0) // 全部已领取 { foreach (MailInfo singleMail in DicMail.Values) { singleMail.SetStatus(MailStatus.Cliamed); } } else SetStatus(id, MailStatus.Cliamed); } public MailInfo GetMail(uint mailID) { if (DicMail.TryGetValue(mailID, out MailInfo mail)) return mail; else { DebugUtil.LogError($"你莫得Id为{mailID}的邮件,不要找了"); return null; } } /// /// 是否有可以领取的邮件 /// /// public bool IsHaveGetMail() { foreach (MailInfo mailInfo in DicMail.Values) { if(mailInfo.IsHaveClaim) return true; } return false; } /// /// 清理所有到期邮件 /// public void ClearOverTime() { List listDelId = new(); foreach (MailInfo mailInfo in DicMail.Values) { if (mailInfo.OverTime <= CommonUtils.GetCurTime(CommonUtils.E_TimeType.Server)) listDelId.Add(mailInfo.Id); } foreach (ulong id in listDelId) { Instance.RemoveMail(id); NetHelper.DeleteMail(id); } } }