Пример #1
0
 public void AddChatMessage(string message, ChatMessageType type, string senderName = "", Client senderClient = null, Character senderCharacter = null, PlayerConnectionChangeType changeType = PlayerConnectionChangeType.None)
 {
     AddChatMessage(ChatMessage.Create(senderName, message, type, senderCharacter, senderClient, changeType: changeType));
 }
Пример #2
0
 public void AddChatMessage(string message, ChatMessageType type, string senderName = "", Character senderCharacter = null)
 {
     AddChatMessage(ChatMessage.Create(senderName, message, type, senderCharacter));
 }
Пример #3
0
        public static void ServerRead(NetIncomingMessage msg, Client c)
        {
            UInt16 ID  = msg.ReadUInt16();
            string txt = msg.ReadString();

            if (txt == null)
            {
                txt = "";
            }

            if (!NetIdUtils.IdMoreRecent(ID, c.lastSentChatMsgID))
            {
                return;
            }

            c.lastSentChatMsgID = ID;

            if (txt.Length > MaxLength)
            {
                txt = txt.Substring(0, MaxLength);
            }

            c.lastSentChatMessages.Add(txt);
            if (c.lastSentChatMessages.Count > 10)
            {
                c.lastSentChatMessages.RemoveRange(0, c.lastSentChatMessages.Count - 10);
            }

            float similarity = 0.0f;

            for (int i = 0; i < c.lastSentChatMessages.Count; i++)
            {
                float closeFactor     = 1.0f / (c.lastSentChatMessages.Count - i);
                int   levenshteinDist = ToolBox.LevenshteinDistance(txt, c.lastSentChatMessages[i]);
                similarity += Math.Max((txt.Length - levenshteinDist) / (float)txt.Length * closeFactor, 0.0f);
            }

            if (similarity + c.ChatSpamSpeed > 5.0f)
            {
                c.ChatSpamCount++;

                if (c.ChatSpamCount > 3)
                {
                    //kick for spamming too much
                    GameMain.Server.KickClient(c, "You have been kicked by the spam filter.");
                }
                else
                {
                    ChatMessage denyMsg = ChatMessage.Create("", "You have been blocked by the spam filter. Try again after 10 seconds.", ChatMessageType.Server, null);
                    c.ChatSpamTimer = 10.0f;
                    GameMain.Server.SendChatMessage(denyMsg, c);
                }
                return;
            }

            c.ChatSpamSpeed += similarity + 0.5f;

            if (c.ChatSpamTimer > 0.0f)
            {
                ChatMessage denyMsg = ChatMessage.Create("", "You have been blocked by the spam filter. Try again after 10 seconds.", ChatMessageType.Server, null);
                c.ChatSpamTimer = 10.0f;
                GameMain.Server.SendChatMessage(denyMsg, c);
                return;
            }

            GameMain.Server.SendChatMessage(txt, null, c);
        }