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); }
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(); }
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(); }
/// <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; } } }
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; } }
//物品封装 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); }
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); }
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); }
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)); } }