From aee07e17664b4e598f4bc54460cffce26b8b823f Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期一, 15 十二月 2025 11:21:33 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.1.20:10010/r/Project_SG_scripts

---
 Main/System/Chat/ChatManager.cs |   68 ++++++++++++++++++++++++++-------
 1 files changed, 53 insertions(+), 15 deletions(-)

diff --git a/Main/System/Chat/ChatManager.cs b/Main/System/Chat/ChatManager.cs
index e9f22b0..701fede 100644
--- a/Main/System/Chat/ChatManager.cs
+++ b/Main/System/Chat/ChatManager.cs
@@ -11,6 +11,9 @@
 
     //<ChannelType,TalkData>
     public Dictionary<ChatChannel, List<TalkData>> talkDict = new Dictionary<ChatChannel, List<TalkData>>();
+    //鐢ㄤ簬缂撳瓨鐜╁鐨勫瑙備俊鎭�
+    public Dictionary<uint, TalkData> playerInfoDict = new Dictionary<uint, TalkData>();
+
     public Dictionary<int, ChatBubbleData> chatBubbles = new Dictionary<int, ChatBubbleData>();
     //<ChannelType,鏃堕棿鎴�>
     public Dictionary<int, int> chatChannelSendTime = new Dictionary<int, int>();
@@ -119,6 +122,8 @@
     private void OnBeforePlayerDataInitializeEvent()
     {
         talkDict.Clear();
+        playerInfoDict.Clear();
+        currentDay = -1;
         ParseChatBubbleConfig();
         nowChatChannel = ChatChannel.World;
         nowChatTab = ChatTab.World;
@@ -185,6 +190,11 @@
     public static int GetUTF8InfoLen(string msg)
     {
         return Encoding.UTF8.GetBytes(msg).Length;
+    }
+
+    public bool TryGetNewPlayerInfoByPlayerID(uint playerID, out TalkData talkData)
+    {
+        return playerInfoDict.TryGetValue(playerID, out talkData);
     }
 
     public bool TryGetBubble(int id, out ChatBubbleData bubble)
@@ -351,7 +361,7 @@
     }
 
     public int currentDay = -1;
-    public void AddTalkData(ChatChannel type, TalkData data)
+    public void AddTalkData(ChatChannel type, TalkData data, bool isSend)
     {
         //濡傛灉瓒呰繃闄愬埗鍏堝垹闄ゆ棫鏁版嵁
         TryDeleteTalkData(type);
@@ -360,10 +370,13 @@
             talkDict[type] = new List<TalkData>();
         }
         talkDict[type].Add(data);
-        OnUpdateTalkEvent?.Invoke(type, data);
+        if (isSend)
+        {
+            OnUpdateTalkEvent?.Invoke(type, data);
+        }
     }
 
-    public bool TryAddDate(int allSeconds, ChatChannel type)
+    public bool TryAddDate(int allSeconds, ChatChannel type, bool isSend)
     {
         DateTime talkTime = TimeUtility.GetTime((uint)allSeconds);
         if (talkTime.Day != currentDay)
@@ -375,17 +388,17 @@
                 isDate = true,
                 Content = Language.Get("Chat09", talkTime.Month, talkTime.Day),
                 TalkTime = (uint)allSeconds,
-            });
+            }, isSend);
             return true;
         }
         return false;
     }
 
-    public void AddSysData(string msg, ArrayList infoList, ChatChannel type)
+    public void AddSysData(string msg, ArrayList infoList, ChatChannel type, bool isSend)
     {
         int allSeconds = TimeUtility.AllSeconds;
         // 濡傛灉闅斿ぉ,澧炲姞鏃ユ湡琛�
-        TryAddDate(allSeconds, type);
+        TryAddDate(allSeconds, type, isSend);
 
         if (!talkDict.ContainsKey(type))
         {
@@ -399,7 +412,7 @@
             BubbleBox = 1,
             TalkTime = (uint)allSeconds,
             InfoList = new ArrayList(infoList),
-        });
+        }, isSend);
     }
 
     public void UpdateTalk(HB310_tagMCTalk vNetData)
@@ -415,7 +428,7 @@
 
         int allSeconds = TimeUtility.AllSeconds;
         // 濡傛灉闅斿ぉ,澧炲姞鏃ユ湡琛�
-        TryAddDate(allSeconds, type);
+        TryAddDate(allSeconds, type, true);
 
         TalkData talkData = new TalkData()
         {
@@ -433,7 +446,9 @@
             ServerID = vNetData.ServerID,
             TalkTime = (uint)allSeconds,
         };
-        AddTalkData(type, talkData);
+        AddPlayerInfo(talkData);
+        AddTalkData(type, talkData, true);
+
     }
 
     public void UpdateTalkCacheList(HB311_tagMCTalkCacheList vNetData)
@@ -453,13 +468,13 @@
         foreach (var info in vNetData.InfoList)
         {
             // 濡傛灉闅斿ぉ,澧炲姞鏃ユ湡琛�
-            TryAddDate((int)info.TalkTime, type);
-            AddTalkData(type, new TalkData()
+            TryAddDate((int)info.TalkTime, type, false);
+            TalkData talkData = new TalkData()
             {
                 ChannelType = vNetData.ChannelType,
-                Name = info.Name,
+                Name = UIHelper.ServerStringTrim(info.Name),
                 PlayerID = info.PlayerID,
-                Content = info.Content,
+                Content = UIHelper.ServerStringTrim(info.Content),
                 BubbleBox = info.BubbleBox,
                 LV = info.LV,
                 Job = info.Job,
@@ -469,9 +484,33 @@
                 FacePic = info.FacePic,
                 ServerID = info.ServerID,
                 TalkTime = info.TalkTime,
-            });
+            };
+            AddPlayerInfo(talkData);
+            AddTalkData(type, talkData, false);
         }
         OnUpdateTalkCacheListEvent?.Invoke();
+    }
+
+    public event Action OnUpdatePlayerInfoEvent;
+    public void AddPlayerInfo(TalkData data)
+    {
+        bool isChange = false;
+        if (playerInfoDict.ContainsKey(data.PlayerID))
+        {
+            if (data.Name != playerInfoDict[data.PlayerID].Name||
+            data.BubbleBox != playerInfoDict[data.PlayerID].BubbleBox||
+            data.LV != playerInfoDict[data.PlayerID].LV||
+            data.Job != playerInfoDict[data.PlayerID].Job||
+            data.RealmLV != playerInfoDict[data.PlayerID].RealmLV||
+            data.TitleID != playerInfoDict[data.PlayerID].TitleID||
+            data.Face != playerInfoDict[data.PlayerID].Face||
+            data.FacePic != playerInfoDict[data.PlayerID].FacePic)
+            isChange = true;
+          
+        }
+        playerInfoDict[data.PlayerID] = data;
+        if (isChange)
+            OnUpdatePlayerInfoEvent?.Invoke();
     }
     #region 鏍囩椤�
     // 褰撳墠灞曠ず鐨勯閬撳叆鍙�
@@ -647,7 +686,6 @@
     public byte ChannelType;    // 0-涓栫晫锛�1-璺ㄦ湇锛�3- 浠欑洘	
     public bool isSystem = false;       //绯荤粺娑堟伅
     public bool isDate = false;          //鍒嗗壊鏃ユ湡
-    public byte NameLen;
     public string Name;
     public uint PlayerID;
     public string Content;

--
Gitblit v1.8.0