| | |
| | | }
|
| | | } |
| | | |
| | | static StringBuilder s_StringBuilder = new StringBuilder(); |
| | | static StringBuilder sb = new StringBuilder(); |
| | | |
| | | const string VerifyPlayerNameUrl = "https://api.maoergame.com/game/role/response"; |
| | | /// <summary>
|
| | |
| | | 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)
|
| | | {
|
| | |
| | | } |
| | | |
| | | 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
|
| | | {
|
| | |
| | | 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));
|
| | |
| | | {
|
| | | 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;
|
| | | } |
| | | |
| | |
| | | {
|
| | | 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)
|