using Framework; using Gameplay; using Gameplay.Common; using Gameplay.Net; using PhxhSDK; using System.Collections.Generic; public class MailSystem : Singlenton, IInitable { public Dictionary DicMail; public bool isHaveAll; public const int MailStatus_New = 0; public const int MailStatus_Opened = 1; public const int MailStatus_Cliamed = 2; public void Init() { DicMail = new Dictionary(); isHaveAll = false; RegisterEvent(); } private void RegisterEvent() { EventManager.Instance.Register(EventManager.EventName.HaveNewMail, OnHaveNewMail); } private void OnHaveNewMail() { NetHelper.RequestMailList(!Instance.isHaveAll); } private void UnregisterEvent() { EventManager.Instance.Unregister(EventManager.EventName.HaveNewMail, OnHaveNewMail); } public void Release() { UnregisterEvent(); isHaveAll = false; DicMail.Clear(); } public void RemoveMail(ulong id) { if (!DicMail.Remove(id)) DebugUtil.LogError($"移除id为{id}的邮件失败"); } public void AddMail(Mail mail) { if (DicMail.TryGetValue(mail.Id, out SingleMail singleMail)) singleMail.Refresh(mail); else { if (DicMail.Count >= GLConfig.Inst.data.MaxMailCount) { SingleMail mailDelect = null; foreach (SingleMail temp in DicMail.Values) { if (mailDelect == temp) mailDelect = temp; if (temp.Status < mailDelect.Status) continue; if (temp.Status > mailDelect.Status) { mailDelect = temp; continue; } if (mailDelect.SendTime < temp.SendTime) continue; if (mailDelect.SendTime > temp.SendTime) { mailDelect = temp; continue; } if (temp.MailID < mailDelect.MailID) continue; if (temp.MailID > mailDelect.MailID) { mailDelect = temp; continue; } } if (mailDelect != null) RemoveMail(mailDelect.Id); } DicMail[mail.Id] = new(mail); Instance.isHaveAll = true; } } public void SetStatus(ulong id, uint status) { DicMail[id].SetStatus(status); } public void HandleIds(ulong id) { if (id == 0) // 全部已领取 { foreach (SingleMail singleMail in DicMail.Values) { if (singleMail.Status != MailStatus_Opened) continue; if (singleMail.MailData == null) continue; singleMail.SetStatus(MailStatus_Cliamed); } } else DicMail[id].SetStatus(MailStatus_Cliamed); } public SingleMail GetMail(uint mailID) { if (DicMail.TryGetValue(mailID, out SingleMail mail)) return mail; else { DebugUtil.LogError($"你莫得Id为{mailID}的邮件,不要找了"); return null; } } public bool IsHaveGetMail() { foreach (SingleMail singleMail in DicMail.Values) { if (singleMail.Status != MailStatus_Cliamed) return true; } return false; } }