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