少年修仙传客户端代码仓库
client_linchunjie
2018-10-17 1871f7a5f4ceb3cec1dc50b59d127313c5d4fee1
2158【1.2.0】猫耳聊天屏蔽逻辑优化,组队邀请,击杀提示不经过猫耳验证
1个文件已修改
77 ■■■■■ 已修改文件
Utility/LanguageVerify.cs 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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)