lcy
7 天以前 4588e1bfdf4ff1d6523296a71a9e84448e7a2277
76 聊天系统-客户端

1.被踢出/退出工会时,清理缓存的旧公会信息
2.打开聊天界面显示最新的发言频道
3.主界面最新消息和公会消息预览,仅显示玩家消息,不显示系统消息和日期消息
3个文件已修改
59 ■■■■■ 已修改文件
Main/System/Chat/ChatManager.cs 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Guild/GuildBaseWin.cs 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Main/HomeWin.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Chat/ChatManager.cs
@@ -93,13 +93,21 @@
        GuildManager.Instance.EnterOrQuitGuildEvent -= EnterOrQuitGuildEvent;
    }
    //被踢出/退出工会时,切换聊天频道
    //被踢出/退出工会时,切换聊天频道,清理缓存的旧公会信息
    private void EnterOrQuitGuildEvent(bool obj)
    {
        if (!obj)
        {
            nowChatChannel = ChatChannel.World;
            nowChatTab = ChatTab.World;
            if (talkDict.ContainsKey(ChatChannel.Guild))
            {
                talkDict[ChatChannel.Guild].Clear();
            }
            if (lastTalkDataDict.ContainsKey(ChatChannel.Guild))
            {
                lastTalkDataDict.Remove(ChatChannel.Guild);
            }
        }
    }
@@ -377,7 +385,11 @@
        if (!lastTalkDataDict.ContainsKey(type) || lastTalkDataDict[type].TalkTime <= data.TalkTime)
        {
            lastTalkDataDict[type] = data;
            //展示的消息不能是日期行和系统行
            if (!data.isDate && !data.isSystem)
            {
                lastTalkDataDict[type] = data;
            }
        }
        if (isSendBullet)
Main/System/Guild/GuildBaseWin.cs
@@ -247,6 +247,7 @@
        }
    }
    List<TalkData> showTalkDatas = new List<TalkData>();
    void ShowTalkInfo()
    {
        if (!ChatManager.Instance.TryGetTalkData(ChatChannel.Guild, out List<TalkData> datas) || datas.IsNullOrEmpty())
@@ -254,15 +255,30 @@
            talkInfoText.text = string.Empty;
            return;
        }
        showTalkDatas.Clear();
        StringBuilder stringBuilder = new StringBuilder();
        int startIndex = Mathf.Max(datas.Count - 2, 0);
        for (int i = startIndex; i < datas.Count; i++)
        // 从后向前遍历,找到最后两条玩家消息(过滤掉系统消息和日期消息)
        int count = 0;
        for (int i = datas.Count - 1; i >= 0 && count < 2; i--)
        {
            TalkData data = datas[i];
            // 只保留玩家消息:非系统消息且非日期消息
            if (!data.isSystem && !data.isDate)
            {
                showTalkDatas.Insert(0, data); // 插入到列表开头以保持时间顺序
                count++;
            }
        }
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < showTalkDatas.Count; i++)
        {
            TalkData data = showTalkDatas[i];
            stringBuilder.Append(UIHelper.AppendColor(GetGuildChatAreaColor(data), GetGuildChatAreaContent(data)));
            stringBuilder.AppendLine();
        }
        talkInfoText.text = stringBuilder.ToString();
    }
}
Main/System/Main/HomeWin.cs
@@ -318,6 +318,27 @@
        // transChatInfo.SetActive(false);
        // UpdateChat(ChatManager.Instance.nowChatTab);
        bool hasLastTalkData = ChatManager.Instance.TryGetLastTalkData(out ChatChannel type, out TalkData data);
        if (!hasLastTalkData)
        {
            ChatManager.Instance.nowChatTab = ChatTab.World;
            ChatManager.Instance.nowChatChannel = ChatChannel.World;
        }
        else
        {
            switch (type)
            {
                case ChatChannel.World:
                default:
                    ChatManager.Instance.nowChatTab = ChatTab.World;
                    ChatManager.Instance.nowChatChannel = ChatChannel.World;
                    break;
                case ChatChannel.Guild:
                    ChatManager.Instance.nowChatTab = ChatTab.Guild;
                    ChatManager.Instance.nowChatChannel = ChatChannel.Guild;
                    break;
            }
        }
        UIManager.Instance.OpenWindow<ChatWin>();
    }