Main/System/Mail/MailCell.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Main/System/Mail/MailCell.cs.meta | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Main/System/Mail/MailInfoAwardCell.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Main/System/Mail/MailInfoAwardCell.cs.meta | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Main/System/Mail/MailInfoAwardItemCell.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Main/System/Mail/MailInfoAwardItemCell.cs.meta | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Main/System/Mail/MailInfoWin.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Main/System/Mail/MailManager.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Main/System/Mail/MailPersonalCell.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Main/System/Mail/MailPersonalCell.cs.meta | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Main/System/Mail/MailWin.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Main/System/Main/HomeWin.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Main/System/Mail/MailCell.cs
File was renamed from Main/System/Mail/MailGlobalCell.cs @@ -1,9 +1,11 @@ using UnityEngine; using System; using UnityEngine; using UnityEngine.UI; public class MailGlobalCell : CellView public class MailCell : CellView { [SerializeField] ButtonEx btnMail; [SerializeField] ImageEx imgState; [SerializeField] Button btnMail; [SerializeField] ImageEx imgMask; [SerializeField] ImageEx imgRed; [SerializeField] TextEx txtTitle; [SerializeField] TextEx txtDate; @@ -18,18 +20,19 @@ uuid = list[index]; if (!model.TryGetMailData(uuid, out var mailData) || mailData == null) return; //mailData.MailState 邮件状态: 0-未知;1-未读;2-已读;3-已领; imgRed.SetActive(mailData.MailState == 1); txtTitle.text = mailData.Title; imgState.SetSprite(mailData.MailState == 2 || mailData.MailState == 3 ? "MailRead" : "MailNoRead"); if (mailData.Items != null) imgMask.SetActive(mailData.MailState == 2 || mailData.MailState == 3); if (mailData.IsTemplateMail() && MailConfig.HasKey(mailData.GetTemplateKey())) { txtDate.text = model.FormatCreateMailTime(mailData.CreateDateTime); txtTitle.text = MailConfig.Get(mailData.GetTemplateKey()).Title; } else { int expiryDay = model.GetMailExpiryDays(mailData.CreateDateTime, mailData.LimitDays); txtDate.text = expiryDay > 0 ? Language.Get("Mail07", expiryDay) : model.FormatCreateMailTime(mailData.CreateDateTime); txtTitle.text = mailData.Title; } txtDate.text = model.FormatMailExpiryDays(mailData.CreateDateTime, mailData.LimitDays); btnMail.SetListener(OnClickButtonMail); } Main/System/Mail/MailCell.cs.metacopy from Main/System/Mail/MailGlobalCell.cs.meta copy to Main/System/Mail/MailCell.cs.meta
File was copied from Main/System/Mail/MailGlobalCell.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 guid: baaef1e2dac4e30499722be1d4c60bb4 guid: 540496bd35ab2f44fa3c043f3b748969 MonoImporter: externalObjects: {} serializedVersion: 2 Main/System/Mail/MailInfoAwardCell.cs
New file @@ -0,0 +1,26 @@ using System; using UnityEngine; using UnityEngine.UI; public class MailInfoAwardCell : CellView { [SerializeField] ItemCell itemCell; [SerializeField] ImageEx imgHave; [SerializeField] ImageEx imgMask; MailManager model { get { return MailManager.Instance; } } public void Display(int index, CellView cellView) { string uuid = cellView.info.Value.infoStr1; if (!model.TryGetMailData(uuid, out MailData mailData) || mailData == null || mailData.Items == null) return; if (index < 0 || index >= mailData.Items.Count) return; int mailState = mailData.MailState;//0-未知;1-未读;2-已读;3-已领; MailItemData data = mailData.Items[index]; itemCell.Init(new ItemCellModel((int)data.ItemID, true, data.Count)); itemCell.button.SetListener(() => ItemTipUtility.Show((int)data.ItemID, true)); float expiryDays = model.GetMailExpiryDays(mailData.CreateDateTime, mailData.LimitDays); imgHave.SetActive(mailState == 3); imgMask.SetActive(mailState == 3 || expiryDays <= 0); } } Main/System/Mail/MailInfoAwardCell.cs.meta
File was renamed from Main/System/Mail/MailGlobalCell.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 guid: baaef1e2dac4e30499722be1d4c60bb4 guid: c60bb6aac93423e46b3dfa2c1c457d0d MonoImporter: externalObjects: {} serializedVersion: 2 Main/System/Mail/MailInfoAwardItemCell.cs
File was deleted Main/System/Mail/MailInfoAwardItemCell.cs.meta
File was deleted Main/System/Mail/MailInfoWin.cs
@@ -1,4 +1,5 @@ using UnityEngine; using System; using UnityEngine; public class MailInfoWin : UIBase { [SerializeField] TextEx txtDate; @@ -7,7 +8,7 @@ [SerializeField] RichText txtNoAwardInfo; [SerializeField] Transform transAward; [SerializeField] RichText txtAwardInfo; [SerializeField] ScrollerController scrAwardItem; [SerializeField] ScrollerController scrAward; [SerializeField] TextEx txtExpiryDate; [SerializeField] ButtonEx btnHave; [SerializeField] ButtonEx btnDelete; @@ -24,23 +25,28 @@ protected override void OnPreOpen() { scrAwardItem.OnRefreshCell += OnRefreshLowRewardCell; base.OnPreOpen(); scrAward.OnRefreshCell += OnRefreshLowRewardCell; model.OnUpdateMailListEvent += OnUpdateMailListEvent; model.OnUpdateMailStateChangeEvent += OnUpdateMailStateChangeEvent; } protected override void OnOpen() { UpdateDataInfo(); GlobalTimeEvent.Instance.secondEvent += OnSecondEvent; Display(); CreateScrAward(); } protected override void OnPreClose() { scrAwardItem.OnRefreshCell -= OnRefreshLowRewardCell; base.OnPreClose(); scrAward.OnRefreshCell -= OnRefreshLowRewardCell; model.OnUpdateMailListEvent -= OnUpdateMailListEvent; model.OnUpdateMailStateChangeEvent -= OnUpdateMailStateChangeEvent; GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent; } private void OnSecondEvent() { txtDate.text = model.FormatCreateMailTime(nowMailData.CreateDateTime); txtExpiryDate.text = model.FormatMailExpiryDays(nowMailData.CreateDateTime, nowMailData.LimitDays); txtExpiryDate.color = model.GetMailExpiryDays(nowMailData.CreateDateTime, nowMailData.LimitDays) >= 0 ? UIHelper.GetUIColor(TextColType.DarkGreen) : UIHelper.GetUIColor(TextColType.Red); } private void OnClickHaveButton() @@ -67,64 +73,65 @@ private void OnUpdateMailStateChangeEvent() { UpdateDataInfo(); Display(); CreateScrAward(); } private void OnUpdateMailListEvent() { UpdateDataInfo(); Display(); CreateScrAward(); } private void OnRefreshLowRewardCell(ScrollerDataType type, CellView cell) { var _cell = cell.GetComponent<MailInfoAwardItemCell>(); var _cell = cell.GetComponent<MailInfoAwardCell>(); _cell?.Display(cell.index, cell); } private void CreateScrAward() { scrAwardItem.Refresh(); if (isHasAward) { for (int i = 0; i < nowMailData.Items.Count; i++) { CellInfo cellInfo = new CellInfo(); cellInfo.infoInt1 = nowMailData.MailState; scrAwardItem.AddCell(ScrollerDataType.Header, i); } } scrAwardItem.Restart(); } private void Display() { if (nowMailData == null) if (!model.TryGetMailData(model.nowUuid, out nowMailData)) { UIManager.Instance.CloseWindow<MailInfoWin>(); return; } isHasAward = nowMailData != null && nowMailData.HasAward(); transNoAward.SetActive(!isHasAward); transAward.SetActive(isHasAward); btnHave.SetActive(isHasAward && nowMailData.MailState != 3); txtDate.text = model.FormatCreateMailTime(nowMailData.CreateDateTime); if (nowMailData.IsTemplateMail()) string key = nowMailData.GetTemplateKey(); if (nowMailData.IsTemplateMail() && MailConfig.HasKey(key)) { string key = nowMailData.GetTemplateKey(); if (MailConfig.HasKey(key)) MailConfig config = MailConfig.Get(key); var templateParams = nowMailData.GetTemplateParams(); // 打印出即将用于格式化的所有信息 // Debug.Log($"[邮件调试] GUID: {nowMailData.GUID}"); // Debug.Log($"[邮件调试] 原始参数JSON (nowMailData.Text): '{nowMailData.Text}'"); // Debug.Log($"[邮件调试] 解析后的参数数量: {templateParams.Count}"); // if (templateParams.Count > 0) // { // for(int i = 0; i < templateParams.Count; i++) // { // Debug.Log($"[邮件调试] 参数[{i}]: {templateParams[i]}"); // } // } try { MailConfig config = MailConfig.Get(key); var templateParams = nowMailData.GetTemplateParams(); string content = string.Format(config.Content, templateParams.ToArray()); txtTitle.text = config.Title; txtNoAwardInfo.text = content; txtAwardInfo.text = content; txtTitle.text = config.Title; } else catch (System.Exception ex) { txtTitle.text = nowMailData.Title; txtNoAwardInfo.text = nowMailData.Text; txtAwardInfo.text = nowMailData.Text; Debug.LogError($"MailInfoWin 解析邮件参数失败! GUID: {nowMailData.GUID}, " + $"原始参数JSON: '{nowMailData.Text}', 错误: {ex.Message}"); } } else @@ -133,19 +140,20 @@ txtNoAwardInfo.text = nowMailData.Text; txtAwardInfo.text = nowMailData.Text; } int expiryDays = model.GetMailExpiryDays(nowMailData.CreateDateTime, nowMailData.LimitDays); txtExpiryDate.text = expiryDays > 0 ? Language.Get("Mail07", expiryDays) : string.Empty; } private void UpdateDataInfo() { if (!model.TryGetMailData(model.nowUuid, out nowMailData)) txtExpiryDate.text = model.FormatMailExpiryDays(nowMailData.CreateDateTime, nowMailData.LimitDays); txtExpiryDate.color = model.GetMailExpiryDays(nowMailData.CreateDateTime, nowMailData.LimitDays) >= 0 ? UIHelper.GetUIColor(TextColType.DarkGreen) : UIHelper.GetUIColor(TextColType.Red); scrAward.Refresh(); if (isHasAward) { UIManager.Instance.CloseWindow<MailInfoWin>(); for (int i = 0; i < nowMailData.Items.Count; i++) { CellInfo cellInfo = new CellInfo(); cellInfo.infoStr1 = nowMailData.GUID; scrAward.AddCell(ScrollerDataType.Header, i, cellInfo); } } isHasAward = nowMailData != null && nowMailData.Items != null; scrAward.Restart(); } } Main/System/Mail/MailManager.cs
@@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using UnityEngine; using LitJson; public class MailManager : GameSystemManager<MailManager> { @@ -17,13 +19,15 @@ public Redpoint tabRedpoint1; public event Action OnUpdateMailListEvent;// 更新邮件列表数据 public event Action OnUpdateMailStateChangeEvent;// 更新邮件状态变更 public readonly string dateFormat = "yyyy-MM-dd"; public readonly string dateFormat = "yyyy.MM.dd"; public string nowUuid = string.Empty; public int personalMailMaxLimitCount; public override void Init() { tabRedpoint0 = new Redpoint(MainRedDot.MailRepoint, GetTabRedpointId(MailCategory.Personal)); tabRedpoint1 = new Redpoint(MainRedDot.MailRepoint, GetTabRedpointId(MailCategory.Global)); DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitializeEvent; personalMailMaxLimitCount = int.Parse(FuncConfigConfig.Get("PersonalMail").Numerical1); } public override void Release() @@ -103,11 +107,50 @@ } } //返回有效期天数(正数=已过期天数,负数=剩余天数) public int GetMailExpiryDays(DateTime createDateTime, int limitDays) //返回有效期天数(正数=剩余天数,负数=已过期天数) public float GetMailExpiryDays(DateTime createDateTime, int limitDays) { DateTime expiryDate = createDateTime.AddDays(limitDays); return (int)(TimeUtility.ServerNow - expiryDate).TotalDays; TimeSpan remainingTime = expiryDate - TimeUtility.ServerNow; return (float)remainingTime.TotalDays; } public string FormatMailExpiryDays(DateTime createDateTime, int limitDays) { string result = string.Empty; float days = GetMailExpiryDays(createDateTime, limitDays); // 防护:处理因客户端与服务器时间戳的微小差异,导致剩余时间略大于有效期上限的情况。 // 将计算出的剩余天数限制在邮件的有效期天数之内。 if (days > limitDays) { days = limitDays; } if (days > 1.0f) { // 大于1天:按向上取整的天数显示。 // MathF.Ceiling(1.01f) -> 2.0f int daysRounded = (int)MathF.Ceiling(days); result = Language.Get("Mail07", (int)MathF.Ceiling(days)); } else if (days > 0.0f) { // 小于1天(但未过期):按精确的小时/分钟显示。 TimeSpan t = TimeSpan.FromDays(days); result = Language.Get("Mail12",StringUtility.Contact( " ", Language.Get("Mail13", t.Hours, t.Minutes))); } else { // (预留)已过期:按负数向下取整(向更小的负数取整,以获得已过期天数的整数绝对值) // MathF.Floor(-1.01f) -> -2.0f // MathF.Floor(-0.5f) -> -1.0f // float expiredDaysFloor = MathF.Floor(days); // int expiredDays = (int)expiredDaysFloor; //直接显示已过期 result = Language.Get("Mail11"); ; } return result; } @@ -123,6 +166,20 @@ } return result; } public int GetMailCount(MailCategory mailCategory) { var result = new List<string>(); foreach (var kvp in mailDataDict) { if (kvp.Value.Category == mailCategory) { result.Add(kvp.Key); } } return result.Count; } public List<string> GetSortMailScrList(MailCategory mailCategory) { @@ -161,6 +218,16 @@ IsBind = i.IsBind, UserData = i.UserData }).ToList(); if (!mailData.Items.IsNullOrEmpty()) { mailData.Items = mailData.Items .Where(item => ItemConfig.HasKey((int)item.ItemID)) // 防护,确保物品存在 .OrderByDescending(item => ItemConfig.Get((int)item.ItemID).ItemColor) // 按品质降序 .ThenBy(item => item.Count) // 品质相同按数量升序 .ToList(); } mailDataDict[mail.GUID] = mailData; } @@ -239,7 +306,7 @@ pack.ReqType = ReqType; GameNetSystem.Instance.SendInfo(pack); } //没有一个可领取的个人邮件 public bool IsCanHaveMail() { @@ -273,12 +340,17 @@ public string GUID; //邮件GUID public byte Type; //邮件类型,暂时默认0 public string CreateTime; //创建时间 public DateTime CreateDateTime; public DateTime CreateDateTime;//创建时间 public byte LimitDays; //有效天数 public string Title; //标题 public string Text; //内容 public byte MailState; //邮件状态: 0-未知;1-未读;2-已读;3-已领; public List<MailItemData> Items; //物品信息 public bool HasAward() { return Items != null && Items.Count > 0; } /// <summary> /// 判断是否为模板类型邮件 @@ -320,12 +392,15 @@ try { // 参数格式为JSON数组:[参数1, 参数2, ...] return JsonUtility.FromJson<List<string>>(Text); List<string> result = JsonMapper.ToObject<List<string>>(Text); // 如果解析结果为null(例如Text的内容是 "null" 字符串),则返回一个空列表以防后续出错 return result ?? new List<string>(); } catch catch (Exception ex) { Debug.LogError($"使用 LitJson 解析邮件参数失败。 Text: {Text}, 错误: {ex.Message}"); return new List<string>(); } } } Main/System/Mail/MailPersonalCell.cs
File was deleted Main/System/Mail/MailPersonalCell.cs.meta
File was deleted Main/System/Mail/MailWin.cs
@@ -1,89 +1,87 @@ using System; using UnityEngine; public class MailWin : UIBase public class MailWin : FunctionsBaseWin { [SerializeField] Transform transPersonal; [SerializeField] Transform transGlobal; [SerializeField] ScrollerController scrPersonal; [SerializeField] ScrollerController scrGlobal; [SerializeField] ButtonEx btnDeleteRead; [SerializeField] ScrollerController scrMail; [SerializeField] ButtonEx btnDeleteAllRead; [SerializeField] ButtonEx btnClaimAll; [SerializeField] ToggleEx togTab0; [SerializeField] RedpointBehaviour rpTab0; [SerializeField] ToggleEx togTab1; [SerializeField] RedpointBehaviour rpTab1; [SerializeField] Transform transNoMail; [SerializeField] Transform transCurrentMailCount; [SerializeField] TextEx txtCurrentMailCount; MailManager model { get { return MailManager.Instance; } } protected override void InitComponent() { base.InitComponent(); btnDeleteRead.SetListener(OnDeleteRead); btnDeleteAllRead.SetListener(OnDeleteRead); btnClaimAll.SetListener(OnClaimAll); togTab0.SetListener(OnTab0); togTab1.SetListener(OnTab1); } protected override void OnPreOpen() { model.OnUpdateMailListEvent += OnUpdateMailListEvent; model.OnUpdateMailStateChangeEvent += OnUpdateMailStateChangeEvent; scrPersonal.OnRefreshCell += OnRefreshPersonalCell; scrGlobal.OnRefreshCell += OnRefreshGlobalCell; base.OnPreOpen(); tabButtons[functionOrder].SelectBtn(true); model.nowMailCategory = MailCategory.Personal; rpTab0.redpointId = model.GetTabRedpointId(MailCategory.Personal); rpTab1.redpointId = model.GetTabRedpointId(MailCategory.Global); transNoMail.SetActive(false); transNoMail.SetActive(true); btnDeleteAllRead.SetActive(true); btnClaimAll.SetActive(true); transCurrentMailCount.SetActive(true); model.OnUpdateMailListEvent += OnUpdateMailListEvent; model.OnUpdateMailStateChangeEvent += OnUpdateMailStateChangeEvent; scrMail.OnRefreshCell += OnRefreshCell; GlobalTimeEvent.Instance.secondEvent += OnSecondEvent; DisPlay(); } protected override void OnPreClose() { base.OnPreClose(); model.OnUpdateMailListEvent -= OnUpdateMailListEvent; model.OnUpdateMailStateChangeEvent -= OnUpdateMailStateChangeEvent; scrPersonal.OnRefreshCell -= OnRefreshPersonalCell; scrGlobal.OnRefreshCell -= OnRefreshGlobalCell; scrMail.OnRefreshCell -= OnRefreshCell; GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent; } private void OnTab0(bool value) private void OnSecondEvent() { if (value) scrMail.m_Scorller.RefreshActiveCellViews(); int personalMailCount = MailManager.Instance.GetMailCount(MailCategory.Personal); txtCurrentMailCount.text = StringUtility.Contact(personalMailCount, "/", MailManager.Instance.personalMailMaxLimitCount); } protected override void OpenSubUIByTabIndex() { switch (functionOrder) { transPersonal.SetActive(true); transGlobal.SetActive(false); model.nowMailCategory = MailCategory.Personal; CreatePersonalScr(model.nowMailCategory); case 0: model.nowMailCategory = MailCategory.Personal; btnDeleteAllRead.SetActive(true); btnClaimAll.SetActive(true); transCurrentMailCount.SetActive(true); int personalMailCount = MailManager.Instance.GetMailCount(MailCategory.Personal); txtCurrentMailCount.text = StringUtility.Contact(personalMailCount, "/", MailManager.Instance.personalMailMaxLimitCount); DisPlay(); break; case 1: model.nowMailCategory = MailCategory.Global; btnDeleteAllRead.SetActive(false); btnClaimAll.SetActive(false); transCurrentMailCount.SetActive(false); DisPlay(); break; default: Debug.LogWarning("未知的标签索引: " + functionOrder); break; } } private void OnTab1(bool value) private void OnRefreshCell(ScrollerDataType type, CellView cell) { if (value) { transPersonal.SetActive(false); transGlobal.SetActive(true); model.nowMailCategory = MailCategory.Global; CreateGlobalScr(model.nowMailCategory); } } protected override void OnOpen() { togTab0.isOn = true; togTab1.isOn = false; model.nowMailCategory = MailCategory.Personal; CreatePersonalScr(model.nowMailCategory); } private void OnRefreshPersonalCell(ScrollerDataType type, CellView cell) { var _cell = cell.GetComponent<MailPersonalCell>(); _cell?.Display(cell.index, cell); } private void OnRefreshGlobalCell(ScrollerDataType type, CellView cell) { var _cell = cell.GetComponent<MailGlobalCell>(); var _cell = cell.GetComponent<MailCell>(); _cell?.Display(cell.index, cell); } @@ -113,50 +111,24 @@ model.ClaimMail(); } public void CreatePersonalScr(MailCategory mailCategory) { scrPersonal.Refresh(); var list = model.GetSortMailScrList(mailCategory); if (list != null) { for (int i = 0; i < list.Count; i++) { CellInfo cellInfo = new CellInfo(); cellInfo.infoInt1 = (int)mailCategory; scrPersonal.AddCell(ScrollerDataType.Header, i, cellInfo); } } scrPersonal.Restart(); } public void CreateGlobalScr(MailCategory mailCategory) { scrGlobal.Refresh(); var list = model.GetSortMailScrList(mailCategory); if (list != null) { for (int i = 0; i < list.Count; i++) { CellInfo cellInfo = new CellInfo(); cellInfo.infoInt1 = (int)mailCategory; scrGlobal.AddCell(ScrollerDataType.Header, i, cellInfo); } } scrGlobal.Restart(); } private void OnUpdateMailStateChangeEvent() { RefreshScr(); DisPlay(); } private void OnUpdateMailListEvent() { RefreshScr(); DisPlay(); } private void RefreshScr() { var list = model.GetSortMailScrList(model.nowMailCategory); private void DisPlay() { scrMail.Refresh(); scrMail.Restart(); MailCategory mailCategory = model.nowMailCategory; var list = model.GetSortMailScrList(mailCategory); if (list.IsNullOrEmpty()) { transNoMail.SetActive(true); @@ -164,9 +136,20 @@ else { transNoMail.SetActive(false); scrPersonal.m_Scorller.RefreshActiveCellViews(); scrGlobal.m_Scorller.RefreshActiveCellViews(); scrMail.Refresh(); for (int i = 0; i < list.Count; i++) { CellInfo cellInfo = new CellInfo(); cellInfo.infoInt1 = (int)mailCategory; scrMail.AddCell(ScrollerDataType.Header, i, cellInfo); } scrMail.Restart(); } int personalMailCount = MailManager.Instance.GetMailCount(MailCategory.Personal); txtCurrentMailCount.text = StringUtility.Contact(personalMailCount, "/", MailManager.Instance.personalMailMaxLimitCount); } } Main/System/Main/HomeWin.cs
@@ -49,6 +49,7 @@ [SerializeField] UIEffectPlayer autoOpenEffect; [SerializeField] Button blessLVBtn; [SerializeField] Text blessLVText; [SerializeField] Button mailBtn; //其他功能入口 [SerializeField] Button monthCardBtn; @@ -87,6 +88,11 @@ UIManager.Instance.OpenWindow<BlessLVWin>(); }); mailBtn.AddListener(() => { UIManager.Instance.OpenWindow<MailWin>(); }); officialUpBtn.AddListener(() => { if (RealmConfig.GetKeys().Count <= PlayerDatas.Instance.baseData.realmLevel)