| Main/System/Chat/ChatBulletView.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Chat/ChatManager.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Chat/ChatPlayerMineCell.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Chat/ChatPlayerOtherCell.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Chat/ChatWin.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Main/HomeWin.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Main/System/Chat/ChatBulletView.cs
@@ -61,6 +61,8 @@ fmlv = fairyMember.FmLV; } return Language.Get("Chat16", RichTextMsgReplaceConfig.GetRichReplace("FAMILY", fmlv), data.Name, data.Content); case ChatChannel.CrossServer: return Language.Get("Chat17", data.Name, data.Content); default: return data.Content; } Main/System/Chat/ChatManager.cs
@@ -115,7 +115,7 @@ { talkDict.Clear(); lastTalkDataDict.Clear(); currentDay = -1; currentDayDict.Clear(); nowChatChannel = ChatChannel.World; nowChatTab = ChatTab.World; } @@ -331,12 +331,12 @@ ChatReport(channelType, content); } void ChatReport(int chatType, string content, string toPlayer="") void ChatReport(int chatType, string content, string toPlayer = "") { try { var channelName = Language.Get($"ChatTab{chatType}"); OperationLogCollect.Instance.ChatReport(content, channelName, toPlayer, chatType); } catch (Exception e) @@ -413,13 +413,19 @@ } } public int currentDay = -1; public Dictionary<ChatChannel, int> currentDayDict = new Dictionary<ChatChannel, int>(); public bool TryAddDate(int allSeconds, ChatChannel type, bool isSendBullet) { DateTime talkTime = TimeUtility.GetTime((uint)allSeconds); if (talkTime.Day != currentDay) // 确保字典中包含该频道的条目 if (!currentDayDict.ContainsKey(type)) { currentDay = talkTime.Day; currentDayDict[type] = -1; } // 每个频道独立检查日期 if (talkTime.Day != currentDayDict[type]) { currentDayDict[type] = talkTime.Day; AddTalkData(type, new TalkData() { ChannelType = (byte)type, @@ -434,7 +440,7 @@ public void AddSysData(string msg, ArrayList infoList, ChatChannel type, bool isSendBullet) { int allSeconds = TimeUtility.AllSeconds; int allSeconds = type == ChatChannel.CrossServer ? TimeUtility.GetCommServerTick(GuildManager.Instance.zoneID) : TimeUtility.AllSeconds; // 如果隔天,增加日期行 TryAddDate(allSeconds, type, isSendBullet); @@ -464,7 +470,7 @@ talkDict[type] = new List<TalkData>(); } int allSeconds = TimeUtility.AllSeconds; int allSeconds = type == ChatChannel.CrossServer ? TimeUtility.GetCommServerTick(GuildManager.Instance.zoneID) : TimeUtility.AllSeconds; // 如果隔天,增加日期行 TryAddDate(allSeconds, type, true); @@ -572,6 +578,7 @@ { ChatTab.World, ChatTab.Guild, ChatTab.CrossServer, // ChatTab.Person, // ChatTab.BlackList, }; @@ -583,8 +590,6 @@ switch (chatTab) { case ChatTab.World: return true; case ChatTab.Guild: //没有公会 if (!PlayerDatas.Instance.fairyData.HasFairy) @@ -594,8 +599,17 @@ return false; } return true; case ChatTab.CrossServer: //没有合服 if (GuildManager.Instance.zoneID <= 0) { if (isTip) SysNotifyMgr.Instance.ShowTip("CrossServerNoOpen"); return false; } return true; default: return false; return true; } } @@ -697,8 +711,9 @@ { World = 0, //世界 Guild = 1, //公会 Person = 2, //私聊 BlackList = 3, //黑名单 CrossServer = 2, //跨服 Person = 3, //私聊 BlackList = 4, //黑名单 } public enum ChatChannel { Main/System/Chat/ChatPlayerMineCell.cs
@@ -30,11 +30,16 @@ string serverName = ServerListCenter.Instance.GetServerName(UIHelper.GetServerIDByAccount(PlayerDatas.Instance.baseData.AccID)); m_PlayerName.text = Language.Get("Chat08", serverName, PlayerDatas.Instance.baseData.PlayerName); } else else if (manager.nowChatTab == ChatTab.Guild) { int fmlv = PlayerDatas.Instance.fairyData.mine.FmLV; m_PlayerName.text = Language.Get("Chat08", RichTextMsgReplaceConfig.GetRichReplace("FAMILY", fmlv), PlayerDatas.Instance.baseData.PlayerName); } else if (manager.nowChatTab == ChatTab.CrossServer) { string serverName = ServerListCenter.Instance.GetServerName(UIHelper.GetServerIDByAccount(PlayerDatas.Instance.baseData.AccID)); m_PlayerName.text = Language.Get("Chat08", serverName, PlayerDatas.Instance.baseData.PlayerName); } } public float GetHeight(string content, ArrayList list) Main/System/Chat/ChatPlayerOtherCell.cs
@@ -32,7 +32,7 @@ string serverName = ServerListCenter.Instance.GetServerName((int)data.ServerID); m_PlayerName.text = Language.Get("Chat08", serverName, data.Name); } else else if (manager.nowChatTab == ChatTab.Guild) { FairyMember fairyMember = PlayerDatas.Instance.fairyData.GetMember((int)data.PlayerID); int fmlv = 0; @@ -42,7 +42,12 @@ } m_PlayerName.text = Language.Get("Chat08", RichTextMsgReplaceConfig.GetRichReplace("FAMILY", fmlv), data.Name); } else if (manager.nowChatTab == ChatTab.CrossServer) { string serverName = ServerListCenter.Instance.GetServerName((int)data.ServerID); m_PlayerName.text = Language.Get("Chat08", serverName, data.Name); } avatarCell.SetListener(() => { AvatarHelper.TryViewOtherPlayerInfo((int)data.PlayerID, serverID: (int)data.ServerID, viewPlayerLineupType: (int)BattlePreSetType.Arena); Main/System/Chat/ChatWin.cs
@@ -22,7 +22,9 @@ [SerializeField] TextEx txtSendChat; [SerializeField] ScrollerController scrWorld; [SerializeField] ScrollerController scrGuild; [SerializeField] ScrollerController scrCrossServer; [SerializeField] ButtonEx serversBtn; private int unreadMsgCount = 0; [SerializeField] ButtonEx btnNewMsgTip; [SerializeField] TextEx txtNewMsgTip; @@ -32,6 +34,7 @@ bool isSettingOpen = false; [SerializeField] ChatSettingButton btnWorldSetting; [SerializeField] ChatSettingButton btnGuildSetting; [SerializeField] ChatSettingButton btnCrossServerSetting; ChatManager manager { get { return ChatManager.Instance; } } protected override void InitComponent() @@ -69,6 +72,11 @@ RefreshChat(manager.nowChatChannel, scrGuild); ScrollerJump(scrGuild, ChatChannel.Guild); } else if (manager.nowChatChannel == ChatChannel.CrossServer) { RefreshChat(manager.nowChatChannel, scrCrossServer); ScrollerJump(scrCrossServer, ChatChannel.CrossServer); } ClearUnreadMsg(); }); btnSetting.SetListener(() => @@ -76,7 +84,10 @@ isSettingOpen = !isSettingOpen; transSettings.SetActive(isSettingOpen); }); serversBtn.SetListener(() => { UIHelper.ShowServersPanel(GuildManager.Instance.crossServerIDList); }); } // 清理未读消息状态 @@ -104,12 +115,18 @@ manager.OnUpdatePlayerInfoEvent += OnUpdatePlayerInfoEvent; scrChatTab.OnRefreshCell += OnRefreshChatTabCell; scrWorld.OnGetDynamicSize += OnGetWorldChatDynamicSize; scrWorld.OnRefreshCell += OnRefreshWorldCell; scrWorld.mScrollRect.onValueChanged.AddListener(OnWorldScrollValChange); scrGuild.OnGetDynamicSize += OnGetGuildChatDynamicSize; scrGuild.OnRefreshCell += OnRefreshGuildCell; scrGuild.mScrollRect.onValueChanged.AddListener(OnGuildScrollValChange); scrCrossServer.OnGetDynamicSize += OnGetChatDynamicSize; scrCrossServer.OnRefreshCell += OnRefreshCell; scrCrossServer.mScrollRect.onValueChanged.AddListener(OnCrossServerScrollValChange); clickScreenOtherSpace.AddListener(OnClickScreenOtherSpace); GlobalTimeEvent.Instance.secondEvent += OnSecondEvent; @@ -119,6 +136,7 @@ transSettings.SetActive(isSettingOpen); btnWorldSetting.SetChannelType(ChatChannel.World); btnGuildSetting.SetChannelType(ChatChannel.Guild); btnCrossServerSetting.SetChannelType(ChatChannel.CrossServer); inputChat.characterLimit = ChatManager.Instance.characterLimit; CreaterAll(manager.nowChatTab); } @@ -139,9 +157,15 @@ scrWorld.OnGetDynamicSize -= OnGetWorldChatDynamicSize; scrWorld.OnRefreshCell -= OnRefreshWorldCell; scrWorld.mScrollRect.onValueChanged.RemoveListener(OnWorldScrollValChange); scrGuild.OnGetDynamicSize -= OnGetGuildChatDynamicSize; scrGuild.OnRefreshCell -= OnRefreshGuildCell; scrGuild.mScrollRect.onValueChanged.RemoveListener(OnGuildScrollValChange); scrCrossServer.OnGetDynamicSize -= OnGetChatDynamicSize; scrCrossServer.OnRefreshCell -= OnRefreshCell; scrCrossServer.mScrollRect.onValueChanged.RemoveListener(OnCrossServerScrollValChange); GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent; clickScreenOtherSpace.RemoveAllListeners(); } @@ -165,6 +189,10 @@ else if (channel == ChatChannel.Guild) { CreateScroller(scrGuild, channel); } else if (channel == ChatChannel.CrossServer) { CreateScroller(scrCrossServer, channel); } } @@ -227,7 +255,10 @@ { if (scrWorld.lockType != EnhanceLockType.LockVerticalBottom) scrWorld.lockType = EnhanceLockType.LockVerticalBottom; if (scrGuild.lockType != EnhanceLockType.LockVerticalBottom) scrGuild.lockType = EnhanceLockType.LockVerticalBottom; if (scrCrossServer.lockType != EnhanceLockType.LockVerticalBottom) scrCrossServer.lockType = EnhanceLockType.LockVerticalBottom; // 如果回到底部,直接清零消息 ClearUnreadMsg(); } @@ -236,6 +267,10 @@ { if (scrWorld.lockType != EnhanceLockType.KeepVertical) scrWorld.lockType = EnhanceLockType.KeepVertical; if (scrGuild.lockType != EnhanceLockType.KeepVertical) scrGuild.lockType = EnhanceLockType.KeepVertical; if (scrCrossServer.lockType != EnhanceLockType.KeepVertical) scrCrossServer.lockType = EnhanceLockType.KeepVertical; } } } @@ -248,6 +283,10 @@ private void OnGuildScrollValChange(Vector2 _pos) { OnScrollValChange(scrGuild, _pos); } private void OnCrossServerScrollValChange(Vector2 _pos) { OnScrollValChange(scrCrossServer, _pos); } private void OnScrollValChange(ScrollerController scorller, Vector2 _pos) @@ -308,7 +347,11 @@ scrGuild.lockType = EnhanceLockType.LockVerticalBottom; // 初始锁定底部 scrGuild.SetActive(chatTab == ChatTab.Guild); transInput.SetActive(chatTab == ChatTab.World || chatTab == ChatTab.Guild); scrCrossServer.lockType = EnhanceLockType.LockVerticalBottom; // 初始锁定底部 scrCrossServer.SetActive(chatTab == ChatTab.CrossServer); transInput.SetActive(true); serversBtn.SetActive(chatTab == ChatTab.CrossServer); CreateChatTabScroller(); @@ -324,6 +367,12 @@ manager.nowChatChannel = ChatChannel.Guild; CreateScroller(scrGuild, ChatChannel.Guild); ScrollerJump(scrGuild, ChatChannel.Guild); ClearUnreadMsg(); break; case ChatTab.CrossServer: manager.nowChatChannel = ChatChannel.CrossServer; CreateScroller(scrCrossServer, ChatChannel.CrossServer); ScrollerJump(scrCrossServer, ChatChannel.CrossServer); ClearUnreadMsg(); break; } @@ -354,6 +403,10 @@ else if (type == ChatChannel.Guild) { RefreshChat(type, scrGuild, playerId, isUpdatePlayerInfo); } else if (type == ChatChannel.CrossServer) { RefreshChat(type, scrCrossServer, playerId, isUpdatePlayerInfo); } } @@ -391,6 +444,8 @@ return; if (type == ChatChannel.Guild && manager.nowChatTab != ChatTab.Guild) return; if (type == ChatChannel.CrossServer && manager.nowChatTab != ChatTab.CrossServer) return; // 1. 自己发送的消息 -> 强制跳转到底部 + 清零 if (playerId == PlayerDatas.Instance.PlayerId) { @@ -423,7 +478,7 @@ } // 特殊情况:如果未读数量巨大(超过了总显示数量),说明整个列表都被刷新了,直接消零 if (unreadMsgCount >= scrWorld.GetNumberOfCells(scrWorld.m_Scorller)) if (unreadMsgCount >= scroller.GetNumberOfCells(scroller.m_Scorller)) { ClearUnreadMsg(); } Main/System/Main/HomeWin.cs
@@ -375,6 +375,10 @@ ChatManager.Instance.nowChatTab = ChatTab.Guild; ChatManager.Instance.nowChatChannel = ChatChannel.Guild; break; case ChatChannel.CrossServer: ChatManager.Instance.nowChatTab = ChatTab.CrossServer; ChatManager.Instance.nowChatChannel = ChatChannel.CrossServer; break; } } UIManager.Instance.OpenWindow<ChatWin>();