| using System.Text; | 
| using System.Collections; | 
| using System; | 
|   | 
| public class ChatData | 
| { | 
|     public ChatData(string content) | 
|     { | 
|         _content = content; | 
|         if (ChatCenter.s_VoiceRegex.IsMatch(_content)) | 
|         { | 
|             _content = ChatCenter.s_VoiceRegex.Replace(_content, string.Empty); | 
|         } | 
|         richText = new StringBuilder(); | 
|         richText.Length = 0; | 
|         createTime = DateTime.Now; | 
|     } | 
|   | 
|     private string _content = string.Empty; | 
|   | 
|     public string content | 
|     { | 
|         get | 
|         { | 
|             if (richText.Length > 0) | 
|             { | 
|                 return richText.ToString(); | 
|             } | 
|             return _content; | 
|         } | 
|         protected set | 
|         { | 
|             _content = value; | 
|         } | 
|     } | 
|   | 
|     public ChatInfoType type { get; protected set; } | 
|   | 
|     public DateTime createTime { get; set; } | 
|   | 
|     private ChatInfoType m_DetailType = ChatInfoType.World; | 
|     public ChatInfoType detailType | 
|     { | 
|         get | 
|         { | 
|             return m_DetailType; | 
|         } | 
|         set | 
|         { | 
|             m_DetailType = value; | 
|         } | 
|     } | 
|   | 
|     public StringBuilder richText; | 
|   | 
|     public ArrayList infoList = new ArrayList(); | 
| } | 
|   | 
| public class ChatUeseData : ChatData | 
| { | 
|     public ChatUeseData(string _content, int player, string name, string extra) : base(_content) | 
|     { | 
|         this.player = player; | 
|         this.name = name; | 
|         extra = UIHelper.ServerStringTrim(extra); | 
|         this.extra = extra; | 
|         this.job = 1; | 
|         IsSound = false; | 
|         var extraLength = extra.Length; | 
|         if (extraLength > 1) | 
|         { | 
|             vipLv = int.Parse(extra.Substring(0, 2)); | 
|         } | 
|         if (extraLength > 2) | 
|         { | 
|             isGm = byte.Parse(extra.Substring(2, 1)) == 1; | 
|         } | 
|         if (extraLength > 3) | 
|         { | 
|             job = byte.Parse(extra.Substring(3, 1)); | 
|         } | 
|         if (extraLength > 4) | 
|         { | 
|             bubbleId = int.Parse(extra.Substring(4, extraLength > 5 ? 2 : 1)); | 
|         } | 
|         if (extraLength > 12) | 
|         { | 
|             serverGroupId = int.Parse(extra.Substring(6, 7)); | 
|         } | 
|         if (extraLength > 16) | 
|         { | 
|             level = int.Parse(extra.Substring(13, 4)); | 
|         } | 
|         // if (ChatCenter.s_VoiceRegex.IsMatch(_content)) | 
|         // { | 
|         //     var _match = ChatCenter.s_VoiceRegex.Match(_content); | 
|         //     soundTick = long.Parse(_match.Groups[1].Value); | 
|         //     soundLength = byte.Parse(_match.Groups[2].Value)/10.0f; | 
|         //     IsSound = true; | 
|         // } | 
|   | 
|         string[] parts = extra.Split('|'); | 
|         face = (parts.Length > 4 && int.TryParse(parts[4], out var result1)) ? result1 : 0; | 
|         facePic = (parts.Length > 5 && int.TryParse(parts[5], out var result2)) ? result2 : 0; | 
|     } | 
|     public int player { get; protected set; } | 
|     public string name { get; protected set; } | 
|     public string extra { get; protected set; } | 
|     public int vipLv { get; protected set; } | 
|     public bool isGm { get; protected set; } | 
|     public int job { get; protected set; } | 
|     public int bubbleId { get; protected set; } | 
|     public long soundTick { get; private set; } | 
|     public bool IsSound { get; private set; } | 
|     public float soundLength { get; private set; } | 
|     public int serverGroupId { get; private set; } | 
|     public int level { get; private set; } | 
|     public int face { get; private set; } | 
|     public int facePic { get; private set; } | 
| } | 
|   | 
| public class ChatSystemData : ChatData | 
| { | 
|     public ChatSystemData(string content) : base(content) | 
|     { | 
|         type = ChatInfoType.System; | 
|     } | 
| } | 
|   | 
|   | 
| // 喇叭暂时不要了 | 
| // public class ChatTrumpetData : ChatUeseData | 
| // { | 
| //     public ChatTrumpetData(string content, int player, string name, string extra, byte speakType, string accId) : base(content, player, name, extra) | 
| //     { | 
| //         this.speakType = speakType; | 
| //         this.accId = accId; | 
| //         // type = ChatInfoType.Trumpet; | 
| //     } | 
|   | 
| //     public byte speakType { get; protected set; } | 
|   | 
| //     public string accId { get; protected set; } | 
| // } | 
|   | 
| public class ChatWorldData : ChatUeseData | 
| { | 
|     public ChatWorldData(string content, int player, string name, string extra) : base(content, player, name, extra) | 
|     { | 
|         type = ChatInfoType.World; | 
|     } | 
| } | 
|   | 
| public class ChatAreaData : ChatUeseData | 
| { | 
|     public ChatAreaData(string content, int player, string name, string extra) : base(content, player, name, extra) | 
|     { | 
|         type = ChatInfoType.Area; | 
|     } | 
| } | 
|   | 
| public class ChatCrossServerData : ChatUeseData | 
| { | 
|     public ChatCrossServerData(string content, int player, string name, string extra) : base(content, player, name, extra) | 
|     { | 
|         type = ChatInfoType.CrossServer; | 
|     } | 
| } | 
|   | 
| public class ChatFactionData : ChatUeseData | 
| { | 
|     public ChatFactionData(string content, int player, string name, string extra, ChatInfoType detailType = ChatInfoType.default1) : base(content, player, name, extra) | 
|     { | 
|         type = ChatInfoType.default1; | 
|         this.detailType = detailType; | 
|     } | 
| } | 
|   | 
| public class ChatTeamData : ChatUeseData | 
| { | 
|     public ChatTeamData(string content, int player, string name, string extra, ChatInfoType detailType = ChatInfoType.Team) : base(content, player, name, extra) | 
|     { | 
|         type = ChatInfoType.Team; | 
|         this.detailType = detailType; | 
|     } | 
| } | 
|   | 
| public class ChatFamilyData : ChatUeseData | 
| { | 
|     public ChatFamilyData(string content, int player, string name, string extra, ChatInfoType detailType = ChatInfoType.Fairy) : base(content, player, name, extra) | 
|     { | 
|         type = ChatInfoType.Fairy; | 
|         this.detailType = detailType; | 
|     } | 
| } | 
|   | 
| public class ChatInviteData : ChatUeseData | 
| { | 
|     public ChatInviteData(string content, int player, string name, string extra) : base(content, player, name, extra) | 
|     { | 
|         type = ChatInfoType.Invite; | 
|     } | 
| } | 
|   | 
| public class ChatFriendData : ChatUeseData | 
| { | 
|     public ChatFriendData(string content, int player, string name, string extra, string toName, byte talkType, uint toPlayer) : base(content, player, name, extra) | 
|     { | 
|         type = ChatInfoType.Friend; | 
|         this.toName = toName; | 
|         this.talkType = talkType; | 
|         this.toPlayer = (int)toPlayer; | 
|     } | 
|   | 
|     public string toName { get; protected set; } | 
|   | 
|     public byte talkType { get; protected set; } | 
|   | 
|     public int toPlayer { get; protected set; } | 
| } |