From 1871f7a5f4ceb3cec1dc50b59d127313c5d4fee1 Mon Sep 17 00:00:00 2001
From: client_linchunjie <461730578@qq.com>
Date: 星期三, 17 十月 2018 15:22:05 +0800
Subject: [PATCH] 2158【1.2.0】猫耳聊天屏蔽逻辑优化,组队邀请,击杀提示不经过猫耳验证
---
Utility/LanguageVerify.cs | 77 +++++++++++++++++++++++++-------------
1 files changed, 50 insertions(+), 27 deletions(-)
diff --git a/Utility/LanguageVerify.cs b/Utility/LanguageVerify.cs
index 9d1067f..3093c58 100644
--- a/Utility/LanguageVerify.cs
+++ b/Utility/LanguageVerify.cs
@@ -18,7 +18,7 @@
}
}
- static StringBuilder s_StringBuilder = new StringBuilder();
+ static StringBuilder sb = new StringBuilder();
const string VerifyPlayerNameUrl = "https://api.maoergame.com/game/role/response";
/// <summary>
@@ -152,7 +152,7 @@
int channel = 0;
var chatCenter = ModelCenter.Instance.GetModel<ChatCenter>();
if (!requireVerify || !GetChannel(channelType, out channel) || PlayerDatas.Instance.baseData.VIPLv >= 4
- || IsFairyFeast(channelType) || chatCenter.IsChatBanned)
+ || IsFairyFeast(channelType) || chatCenter.IsChatBanned || IsSystemChat(content))
{
if (callback != null)
{
@@ -227,11 +227,9 @@
}
Dictionary<long, List<string>> transferContents = new Dictionary<long, List<string>>();
+ Dictionary<long, List<int>> splitContents = new Dictionary<long, List<int>>();
List<MatchString> matchs = new List<MatchString>();
-
- const string TransferIdentify = " 0 ";
- Regex transferRegex = new Regex(TransferIdentify, RegexOptions.Singleline);
struct MatchString
{
@@ -258,12 +256,19 @@
string TransferContent(long tick, string content)
{
List<string> list;
+ List<int> splits;
if (!transferContents.TryGetValue(tick, out list))
{
list = new List<string>();
transferContents.Add(tick, list);
}
+ if (!splitContents.TryGetValue(tick, out splits))
+ {
+ splits = new List<int>();
+ splitContents.Add(tick, splits);
+ }
list.Clear();
+ splits.Clear();
matchs.Clear();
AddMathcs(WordAnalysis.Color_Start_Regex.Matches(content));
AddMathcs(WordAnalysis.Color_End_Regex.Matches(content));
@@ -278,19 +283,23 @@
{
return x.index.CompareTo(y.index);
});
+ var index = 0;
for (int i = 0; i < matchs.Count; i++)
{
list.Add(matchs[i].value);
+ var length = matchs[i].index - index;
+ splits.Add(length);
+ index += length + matchs[i].value.Length;
}
- content = WordAnalysis.Color_Start_Regex.Replace(content, TransferIdentify);
- content = WordAnalysis.Color_End_Regex.Replace(content, TransferIdentify);
- content = ImgAnalysis.FaceRegex.Replace(content, TransferIdentify);
- content = ChatCtrl.InviteRegex.Replace(content, TransferIdentify);
- content = WordAnalysis.Size_Start_Regex.Replace(content, TransferIdentify);
- content = WordAnalysis.Size_End_Regex.Replace(content, TransferIdentify);
- content = WordAnalysis.Space_Regex.Replace(content, TransferIdentify);
- content = ChatCtrl.KillRegex.Replace(content, TransferIdentify);
- content = ChatCenter.s_VoiceRegex.Replace(content, TransferIdentify);
+ content = WordAnalysis.Color_Start_Regex.Replace(content, string.Empty);
+ content = WordAnalysis.Color_End_Regex.Replace(content, string.Empty);
+ content = ImgAnalysis.FaceRegex.Replace(content, string.Empty);
+ content = ChatCtrl.InviteRegex.Replace(content, string.Empty);
+ content = WordAnalysis.Size_Start_Regex.Replace(content, string.Empty);
+ content = WordAnalysis.Size_End_Regex.Replace(content, string.Empty);
+ content = WordAnalysis.Space_Regex.Replace(content, string.Empty);
+ content = ChatCtrl.KillRegex.Replace(content, string.Empty);
+ content = ChatCenter.s_VoiceRegex.Replace(content, string.Empty);
return content;
}
@@ -301,22 +310,36 @@
{
return content;
}
- var stringIndex = 0;
- var index = 0;
- s_StringBuilder.Length = 0;
- foreach (Match match in transferRegex.Matches(content))
+ List<int> splits;
+ if (!splitContents.TryGetValue(tick, out splits))
{
- s_StringBuilder.Append(content.Substring(index, match.Index - index));
- if (stringIndex < list.Count)
- {
- s_StringBuilder.Append(list[stringIndex]);
- stringIndex++;
- }
- index = match.Index + match.Length;
+ return content;
}
+ var index = 0;
+ sb.Length = 0;
+ for (int i = 0; i < splits.Count; i++)
+ {
+ sb.Append(content.Substring(index, splits[i]));
+ if (i < list.Count)
+ {
+ sb.Append(list[i]);
+ }
+ index += splits[i];
+ }
+ sb.Append(content.Substring(index));
transferContents.Remove(tick);
- s_StringBuilder.Append(content.Substring(index, content.Length - index));
- return s_StringBuilder.ToString();
+ splitContents.Remove(tick);
+ return sb.ToString();
+ }
+
+ bool IsSystemChat(string content)
+ {
+ if (ChatCtrl.InviteRegex.IsMatch(content)
+ || ChatCtrl.KillRegex.IsMatch(content))
+ {
+ return true;
+ }
+ return false;
}
bool GetChannel(ChatInfoType type, out int channel)
--
Gitblit v1.8.0