Пример #1
0
        public void AddChatNode(bool checkSensitive, string str)
        {
            ChatInfoNodeData data = null;

            try
            {
                var bytes     = Convert.FromBase64String(str);
                var unwrapped = LZ4Codec.Decode32(bytes, 0, bytes.Length, decodeBuffer, 0, decodeBuffer.Length, false);
                using (var ms = new MemoryStream(decodeBuffer, 0, unwrapped, false))
                {
                    data = Serializer.Deserialize <ChatInfoNodeData>(ms);
                }
            }
            catch (Exception)
            {
                // ignored
            }

            if (data == null)
            {
                ChatNodeList.Add(new CharInfoNode(checkSensitive, str));
                return;
            }
            if (data.Type == (int)eChatLinkType.Dictionary)
            {
                //AnalyseDictionaryNode(data);
                return;
            }
            var infoNode = new CharInfoNode(false, "", data);

            ChatNodeList.Add(infoNode);
        }
Пример #2
0
        private void InitMessage()
        {
            if (chatDataMsg == null)
            {
                return;
            }
            isMine = chatDataMsg.Type == (int)eChatChannel.MyWhisper;

            var roleId = chatDataMsg.RoleId;
            var tbChar = Table.GetCharacterBase(roleId);

            if (tbChar == null)
            {
                return;
            }
            GameUtils.SetSpriteIcon(HeadInfo, tbChar.HeadIcon);
            ResetMessage();
            SetTime();

            if (chatDataMsg.SoundData != null)
            {
                var data = new ChatInfoNodeData();
                data.Type      = (int)eChatLinkType.Voice;
                data.SoundData = chatDataMsg.SoundData;
                var node = new CharInfoNode(false, "", data);
                ChatNodeList.Add(node);
            }
            else
            {
                ParseText(ShouldCheckSensitiveWord(chatDataMsg), chatDataMsg.Content);
            }
            Display();
        }
Пример #3
0
        private void InitMessage()
        {
            if (chatDataMsg == null)
            {
                return;
            }
            isMine = chatDataMsg.Type == (int)eChatChannel.MyWhisper;
            var roleId   = chatDataMsg.RoleId;
            var rebornId = 0;

            if (isMine)
            {
                rebornId = PlayerDataManager.Instance.GetExData(51);
                var tbReborn = Table.GetTransmigration(rebornId);
                if (tbReborn == null)
                {
                    return;
                }
                SetChatIcon(roleId, tbReborn);
            }
            else
            {
                rebornId = chatDataMsg.Ladder;
                var tbReborn = Table.GetTransmigration(rebornId);
                if (tbReborn == null)
                {
                    return;
                }
                SetChatIcon(roleId, tbReborn);
            }
            //var roleId = chatDataMsg.RoleId;
            //var tbChar = Table.GetCharacterBase(roleId);
            //if (tbChar == null)
            //{
            //    return;
            //}
            //GameUtils.SetSpriteIcon(HeadInfo, tbChar.HeadIcon);
            ResetMessage();
            SetTime();

            if (chatDataMsg.SoundData != null)
            {
                var data = new ChatInfoNodeData();
                data.Type      = (int)eChatLinkType.Voice;
                data.SoundData = chatDataMsg.SoundData;
                var node = new CharInfoNode(false, "", data);
                ChatNodeList.Add(node);
            }
            else
            {
                ParseText(ShouldCheckSensitiveWord(chatDataMsg), chatDataMsg.Content);
            }
            Display();
        }
Пример #4
0
    /// <summary>
    /// 主播送礼广播信息处理(VIP显示和图片替换文字)
    /// </summary>
    /// <param name="anchorMessageData"></param>
    private void AnchorBroadcastMsg(ChatMessageDataModel anchorMessageData)
    {
        var str = anchorMessageData.Content.Substring(SpecialCode.ChatBegin.Length,
                                                      anchorMessageData.Content.Length - SpecialCode.ChatEnd.Length
                                                      - SpecialCode.ChatBegin.Length);
        ChatInfoNodeData data = null;

        try
        {
            var bytes     = Convert.FromBase64String(str);
            var unwrapped = LZ4Codec.Decode32(bytes, 0, bytes.Length, decodeBuffer, 0, decodeBuffer.Length, false);
            using (var ms = new MemoryStream(decodeBuffer, 0, unwrapped, false))
            {
                data = Serializer.Deserialize <ChatInfoNodeData>(ms);
            }
        }
        catch (Exception)
        {
            // ignored
        }

        if (data != null)
        {
            var strDic = GameUtils.GetDictionaryText(data.Id);
            if (null != data.StrExData)
            {
                var roseCount = data.StrExData[1];
                var allStr    = string.Format(strDic, data.StrExData[0], data.StrExData[1]);
                var numStrs   = Table.GetClientConfig(450).Value.Split('|');
                var codeStrs  = Table.GetClientConfig(1350).Value.Split('|');
                for (int i = 0; i < numStrs.Length; i++)
                {
                    if (!string.Equals(numStrs[i], roseCount))
                    {
                        continue;
                    }
                    allStr = allStr.Replace(roseFlag, codeStrs[i]);
                }
                Text = allStr;
            }
        }
    }
Пример #5
0
 public CharInfoNode(bool checkSensitive, string info, ChatInfoNodeData data = null)
 {
     if (data == null)
     {
         NodeData      = new ChatInfoNodeData();
         NodeData.Type = (int)eChatLinkType.Text;
     }
     else
     {
         NodeData = data;
     }
     if (LinkType == eChatLinkType.Text && checkSensitive)
     {
         InfoContent = info.CheckSensitive();
     }
     else
     {
         InfoContent = info;
     }
 }
Пример #6
0
        //物品封装
        public static string ItemWrap(ItemBaseData item)
        {
            var data = new ChatInfoNodeData();

            data.Type = (int)eChatLinkType.Equip;
            data.Id   = item.ItemId;
            var nowItemExdataCount0 = item.Exdata.Count;

            for (var i = 0; i < nowItemExdataCount0; i++)
            {
                data.ExData.Add(item.Exdata[i]);
            }
            var str = "";

            using (var ms = new MemoryStream())
            {
                Serializer.Serialize(ms, data);
                var wrap = LZ4Codec.Encode(ms.GetBuffer(), 0, (int)ms.Length);
                str = Convert.ToBase64String(wrap);
            }
            str = SpecialCode.ChatBegin + str + SpecialCode.ChatEnd;
            return(str);
        }
Пример #7
0
        public static string SubStringLength(this string desc, int count)
        {
            if (string.IsNullOrEmpty(desc))
            {
                return("");
            }

            var nbegin = 0;
            var nend   = 0;
            var token1 = "{!";
            var token2 = "!}";


            var resultStr = "";

            var realCount = 0;
            var color     = @"[[][A-Fa-f0-9]{6}[]]";

            var regex = new Regex(color);

            var falgCount = 0;

            while (falgCount < desc.Length)
            {
                if (realCount >= count)
                {
                    break;
                }

                if (desc.Length >= falgCount + 8)
                {
//[000000]
                    var s = desc.Substring(falgCount, 8);
                    if (regex.IsMatch(s))
                    {
                        resultStr += s;
                        falgCount += 8;
                        continue;
                    }
                }

                if (desc.Length >= falgCount + 3)
                {
//[-]
                    var s = desc.Substring(falgCount, 3);
                    if (s == "[-]")
                    {
                        resultStr += s;
                        falgCount += 3;
                        continue;
                    }
                }

                if (desc.Length >= falgCount + 2)
                {
//"{!"
                    var s = desc.Substring(falgCount, 2);
                    if (s == token1)
                    {
                        nend = desc.IndexOf(token2, falgCount, StringComparison.Ordinal);
                        if (nend != -1)
                        {
                            var temp = desc.Substring(falgCount + token1.Length, nend - falgCount - token2.Length);

                            var bytes     = Convert.FromBase64String(temp);
                            var unwrapped = LZ4Codec.Decode32(bytes, 0, bytes.Length, decodeBuffer, 0, decodeBuffer.Length, false);

                            ChatInfoNodeData data = null;
                            using (var ms = new MemoryStream(decodeBuffer, 0, unwrapped, false))
                            {
                                data = Serializer.Deserialize <ChatInfoNodeData>(ms);
                            }

                            if (data == null)
                            {
                                if (realCount + 2 > count)
                                {
                                    break;
                                }

                                resultStr += s;
                                falgCount += 2;
                                realCount += 2;
                            }
                            else
                            {
                                var addCount = 0;
                                switch ((eChatLinkType)data.Type)
                                {
                                case eChatLinkType.Face:
                                {
                                    addCount += 2;
                                }
                                break;

                                case eChatLinkType.Postion:
                                {
                                    addCount += 4;
                                    var tbScene = Table.GetScene(data.ExData[0]);
                                    if (tbScene != null)
                                    {
                                        addCount += tbScene.Name.Length;
                                    }
                                    var x = data.ExData[1] / 100;
                                    var y = data.ExData[2] / 100;
                                    addCount += x.ToString().Length;
                                    addCount += y.ToString().Length;
                                }
                                break;

                                case eChatLinkType.Equip:
                                {
                                    var tbItem = Table.GetItemBase(data.Id);
                                    if (tbItem != null)
                                    {
                                        addCount += 2;
                                        addCount += tbItem.Name.Length;
                                    }
                                }
                                break;

                                case eChatLinkType.Team:
                                {
                                    var tbFuben = Table.GetFuben(data.Id);
                                    if (tbFuben != null)
                                    {
                                        addCount += data.ExData[0];
                                    }
                                }
                                break;

                                case eChatLinkType.Dictionary:
                                {
                                }
                                break;
                                }

                                if (realCount + addCount > count)
                                {
                                    break;
                                }
                                realCount += addCount;
                                falgCount  = nend + token2.Length;
                                resultStr += (token1 + temp + token2);
                            }
                            continue;
                        }

                        if (realCount + 2 >= count)
                        {
                            break;
                        }

                        resultStr += s;
                        falgCount += 2;
                        realCount += 2;
                        continue;
                    }
                }

                resultStr += desc[falgCount];
                falgCount++;
                realCount++;
            }

            return(resultStr);
        }
Пример #8
0
        public static int GetStringLength(this string desc)
        {
            if (string.IsNullOrEmpty(desc))
            {
                return(0);
            }
            if (desc.Length > 1000)
            {
                return(1000);
            }
            //去除聊私聊名字的长度,不能当成内容名字
            var nend1 = desc.IndexOf("/", 0, StringComparison.Ordinal);

            if (nend1 == 0)
            {
                var nend2 = desc.IndexOf(" ", 0, StringComparison.Ordinal);
                if (nend2 != -1)
                {
                    desc = desc.Substring(nend2 + 1, desc.Length - nend2 - 1);
                }
            }


            var nend       = 0;
            var nbegin     = 0;
            var token1     = "{!";
            var token2     = "!}";
            var result_str = "";
            var addCount   = 0;

            while (nend != -1)
            {
                nend = desc.IndexOf(token1, nbegin, StringComparison.Ordinal);
                if (nend == -1)
                {
                    var temp1 = desc.Substring(nbegin, desc.Length - nbegin);
                    result_str = result_str + temp1;
                }
                else
                {
//拼接井号前的字符
                    var temp3 = desc.Substring(nbegin, nend - nbegin);
                    result_str = result_str + temp3;
                    nbegin     = nend + token1.Length;
                    //查询结束符
                    var findend = true;
                    var midstr  = "";
                    while (findend)
                    {
                        nend = desc.IndexOf(token2, nbegin, StringComparison.Ordinal);
                        if (nend == -1)
                        {
//没有找到
                            var temp1 = desc.Substring(nbegin, desc.Length - nbegin);
                            result_str = result_str + midstr + temp1;

                            result_str = Regex.Replace(result_str, @"[[][A-Fa-f0-9]{6}[]]", "");
                            result_str = result_str.Replace("[-]", "");
                            //Regex.Replace(result_str, @"^[[][A-Fa-f0-9]{6}[]]$", "");

                            var len = result_str.Length + addCount;
                            return(len);
                        }
                        var temp2 = desc.Substring(nbegin, nend - nbegin);
                        midstr = midstr + temp2;

                        var bytes     = Convert.FromBase64String(midstr);
                        var unwrapped = LZ4Codec.Decode32(bytes, 0, bytes.Length, decodeBuffer, 0, decodeBuffer.Length, false);

                        ChatInfoNodeData data = null;
                        using (var ms = new MemoryStream(decodeBuffer, 0, unwrapped, false))
                        {
                            data = Serializer.Deserialize <ChatInfoNodeData>(ms);
                        }

                        if (data == null)
                        {
                            addCount += midstr.Length;
                        }
                        else
                        {
                            switch ((eChatLinkType)data.Type)
                            {
                            case eChatLinkType.Face:
                            {
                                addCount += 2;
                            }
                            break;

                            case eChatLinkType.Postion:
                            {
                                addCount += 4;
                                var tbScene = Table.GetScene(data.ExData[0]);
                                if (tbScene != null)
                                {
                                    addCount += tbScene.Name.Length;
                                }
                                var x = data.ExData[1] / 100;
                                var y = data.ExData[2] / 100;
                                addCount += x.ToString().Length;
                                addCount += y.ToString().Length;
                            }
                            break;

                            case eChatLinkType.Equip:
                            {
                                var tbItem = Table.GetItemBase(data.Id);
                                if (tbItem != null)
                                {
                                    addCount += 2;
                                    addCount += tbItem.Name.Length;
                                }
                            }
                            break;

                            case eChatLinkType.Team:
                            {
                                var tbFuben = Table.GetFuben(data.Id);
                                if (tbFuben != null)
                                {
                                    addCount += data.ExData[0];
                                }
                            }
                            break;

                            case eChatLinkType.Dictionary:
                            {
                                var str = GameUtils.GetDictionaryText(data.Id);
                                addCount += str.Length;
                            }
                            break;
                            }
                        }
                        findend = false;
                        nbegin  = nend + token2.Length;
                    }
                }
            }
            result_str = Regex.Replace(result_str, @"[[][A-Fa-f0-9]{6}[]]", "");
            result_str = result_str.Replace("[-]", "");
            var len1 = result_str.Length + addCount;

            return(len1);
        }
Пример #9
0
    private void AnalyseDictionaryNode(ChatInfoNodeData data)
    {
        var strDic = GameUtils.GetDictionaryText(data.Id);
        var begin  = 0;
        var flag   = 0;

        while (begin != -1)
        {
            begin = strDic.IndexOf("{", StringComparison.Ordinal);
            var end = strDic.IndexOf("}", StringComparison.Ordinal);

            if (begin != -1 && end != -1)
            {
                var perColor = "";
                if (begin >= 8)
                {
                    var s = strDic.Substring(begin - 8, 8);
                    if (Regex.IsMatch(s, GameUtils.BeginCoclorStrRegex))
                    {
                        perColor = s;
                    }
                }

                var endColor = "";
                if (strDic.Length >= end + 3)
                {
                    var s = strDic.Substring(end + 1, 3);
                    if (s == GameUtils.EndCoclorStrRegex)
                    {
                        end     += 3;
                        endColor = s;
                    }
                }


                if (begin != 0)
                {
                    var s = strDic.Substring(0, begin);
                    mCharInfoNodes.Add(new CharInfoNode(ShouldCheckSensitiveWord(), s));
                }

                if (data.StrExData.Count == flag)
                {
                    break;
                }

                var strEx = data.StrExData[flag];
                if (strEx.Length > 0 && strEx[0] == '#')
                {
                    var args = strEx.Split(':');
                    if (args[0] == "#ItemBase.Name")
                    {
                        var itemId  = args[1].ToInt();
                        var newData = new ChatInfoNodeData();
                        newData.Type = (int)eChatLinkType.Equip;
                        newData.Id   = itemId;
                        newData.ExData.AddRange(data.ExData);
                        mCharInfoNodes.Add(new CharInfoNode(ShouldCheckSensitiveWord(), "", newData));
                    }
                    else if (args[0] == "#Character")
                    {
                        var name    = args[1];
                        var newData = new ChatInfoNodeData();
                        newData.Type = (int)eChatLinkType.Character;

                        if (perColor != "")
                        {
                            name = perColor + name;
                        }
                        if (endColor != "")
                        {
                            name = name + endColor;
                        }

                        var node = new CharInfoNode(ShouldCheckSensitiveWord(), name, newData);
                        node.CharacterId = args[2].ToUlong();
                        mCharInfoNodes.Add(node);
                    }
                    else if (args[0] == "#Scene.Name")
                    {
                        var ret     = "";
                        var sceneId = args[1].ToInt();
                        var tbScene = Table.GetScene(sceneId);
                        if (tbScene != null)
                        {
                            ret += tbScene.Name;
                        }
                        if (args.Length > 2)
                        {
                            for (var i = 2; i < args.Length; i++)
                            {
                                sceneId = args[i].ToInt();
                                tbScene = Table.GetScene(sceneId);
                                if (tbScene != null)
                                {
                                    ret += "," + tbScene.Name;
                                }
                            }
                        }
                        mCharInfoNodes.Add(new CharInfoNode(ShouldCheckSensitiveWord(), ret));
                    }
                }
                else
                {
                    if (perColor != "")
                    {
                        strEx = perColor + strEx;
                    }
                    if (endColor != "")
                    {
                        strEx = strEx + endColor;
                    }

                    mCharInfoNodes.Add(new CharInfoNode(ShouldCheckSensitiveWord(), strEx));
                }
                flag++;
                strDic = strDic.Substring(end + 1);
            }
        }
        if (!string.IsNullOrEmpty(strDic))
        {
            mCharInfoNodes.Add(new CharInfoNode(ShouldCheckSensitiveWord(), strDic));
        }
    }