Гайд Простой фильтр чата

  • Nellored
  • Модератор раздела "Garry's Mod"
  • 831
  • 160
  • 172
На повестке дня фильтр чата, простой и удобный
если будете пиздить на другие форумы, то укажите автора​
исходник:
local tableB = { -- Таблица с матюками
    "бля",
    "еблан",
    "долбоёб"
}

local finding = function(table, text) -- функция, которая из таблицы получает каждое слово и сравнивает со сказанным игрока
    for k,v in pairs(table) do
        if string.find(string.lower(text), v) then -- Если сказанное игроком находится в таблице, то будет возвращено TRUE, в другом случае TRUE не будет возвращено
            return true
        end
    end
end

if SERVER then -- у нас тут SHARED часть, так что сделаем проверку на сервер
    hook.Remove("PlayerSay", "FJAmbPODSFIRJGMS") -- Удаляем HOOK, если он был
    hook.Add( "PlayerSay", "FJAmbPODSFIRJGMS", function(ply, text) -- Добавляем HOOK
        if finding(tableB, text) then -- Если возвращено TRUE, тогда нам выпешет в чат и сообщения не будет видно, в другом случае сообщение будет написано
            ply:ChatPrint("Без матюков") -- Если матюкнулся, ну получай уведомление
            return "" -- В чате не будет отображения сообщения
        end
    end)
end
-- код наклипал за 10 минут, лично мне лень делать код с поверками и сменой знаков (Бля БлЯ бЛя бЛЯ) типа того, если кто захочет, может попробовать
 
  • 158
  • 21
  • 59
1657687308630.png

гениально нечего не сказать
 
  • 97
  • 1
  • 12
Контакты для связи отсутствуют.
На повестке дня фильтр чата, простой и удобный
если будете пиздить на другие форумы, то укажите автора​
исходник:
local tableB = { -- Таблица с матюками
    "бля",
    "еблан",
    "долбоёб"
}

local finding = function(table, text) -- функция, которая из таблицы получает каждое слово и сравнивает со сказанным игрока
    for k,v in pairs(table) do
        if string.find(string.lower(text), v) then -- Если сказанное игроком находится в таблице, то будет возвращено TRUE, в другом случае TRUE не будет возвращено
            return true
        end
    end
end

if SERVER then -- у нас тут SHARED часть, так что сделаем проверку на сервер
    hook.Remove("PlayerSay", "FJAmbPODSFIRJGMS") -- Удаляем HOOK, если он был
    hook.Add( "PlayerSay", "FJAmbPODSFIRJGMS", function(ply, text) -- Добавляем HOOK
        if finding(tableB, text) then -- Если возвращено TRUE, тогда нам выпешет в чат и сообщения не будет видно, в другом случае сообщение будет написано
            ply:ChatPrint("Без матюков") -- Если матюкнулся, ну получай уведомление
            return "" -- В чате не будет отображения сообщения
        end
    end)
end
-- код наклипал за 10 минут, лично мне лень делать код с поверками и сменой знаков (Бля БлЯ бЛя бЛЯ) типа того, если кто захочет, может попробовать
в чем проблема разделить код на два файла? показывать плейнтекстом серверную логику клиентам очень плохая практика

>string.lower(text)
не работает с UTF-8

алсо, зачем использовать pairs, если в таблице все ключи последовательные? обычный цикл через # дешевле
1657701846157.png

1657701945768.png


/душнила
 
  • 158
  • 21
  • 59
в чем проблема разделить код на два файла? показывать плейнтекстом серверную логику клиентам очень плохая практика

>string.lower(text)
не работает с UTF-8

алсо, зачем использовать pairs, если в таблице все ключи последовательные? обычный цикл через # дешевле
Посмотреть вложение 37918
Посмотреть вложение 37919

/душнила
Гениально критиковать медленный pairs метод который даже не в цикле и не так часто вызывается.
string.lower для английских слов хотя и вставить русский метод было бы не сложно
function string.lower ( str ) return str:gsub ( "([A-ZА-Я])", function ( c ) return string.char ( string.byte ( c ) + 32 ) end ) end
 
  • 97
  • 1
  • 12
Контакты для связи отсутствуют.
Гениально критиковать медленный pairs метод который даже не в цикле и не так часто вызывается.
string.lower для английских слов хотя и вставить русский метод было бы не сложно
function string.lower ( str ) return str:gsub ( "([A-ZА-Я])", function ( c ) return string.char ( string.byte ( c ) + 32 ) end ) end
Ну а для чего к и так существующим сотням вызовов функции pairs в DarkRP и десяткам сотен вызовов в аддонах добавлять еще один :-)

>function string.lower ( str ) return str:gsub ( "([A-ZА-Я])", function ( c ) return string.char ( string.byte ( c ) + 32 ) end ) end
не тестил, но выглядит бодренько, ставлю лайк (а разве gsub с UTF8 работает? :blobscoolthinking:)
 
Сверху Снизу