public static string FilterText(Mobile m, string s, bool punish)
        {
            try
            {
                string filter   = "";
                string subOne   = "";
                string subTwo   = "";
                string subThree = "";
                int    index    = 0;

                for (int i = 0; i < Data.Filters.Count; ++i)
                {
                    filter = Data.Filters[i].ToString();

                    if (filter == "")
                    {
                        Data.Filters.Remove(filter);
                        continue;
                    }

                    index = s.ToLower().IndexOf(filter);

                    if (index >= 0)
                    {
                        if (m.AccessLevel == AccessLevel.Player && punish)
                        {
                            if (++Data.GetData(m).Warnings <= Data.FilterWarnings)
                            {
                                m.SendMessage(Data.GetData(m).SystemC, General.Local(111) + " " + filter);
                            }
                            else
                            {
                                Data.GetData(m).Warnings = 0;

                                Events.InvokeFilterViolation(new FilterViolationEventArgs(m));

                                if (Data.FilterPenalty == FilterPenalty.Ban)
                                {
                                    Data.GetData(m).Ban(TimeSpan.FromMinutes(Data.FilterBanLength));
                                }

                                if (Data.FilterPenalty == FilterPenalty.Jail)
                                {
                                    ChatJail.SendToJail(m);
                                }

                                if (Data.FilterPenalty != FilterPenalty.None)
                                {
                                    return("");
                                }
                            }
                        }

                        subOne = s.Substring(0, index);
                        subTwo = "";

                        for (int ii = 0; ii < filter.Length; ++ii)
                        {
                            subTwo += "*";
                        }

                        subThree = s.Substring(index + filter.Length, s.Length - filter.Length - index);

                        s = subOne + subTwo + subThree;

                        i--;
                    }
                }
            }
            catch { Errors.Report(General.Local(176)); }

            return(s);
        }