Перейти к содержимому

Stinger

Пользователи
  • Публикации

    36
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные пользователем Stinger


  1. Ну так в луа и не регулярные выражения! Здесь гораздо более простой аналог — шаблоны. Ещё раз: это не регулярные выражения, ни в коем случае, — шаблоны. Никаких повторений, именованных групп и прочего нет. Обходи повторением элементов шаблона.

     

    Инфа по шаблонам: гайд, рецепт.

     

    Спасибо


  2. Если Lua-интерпретатор вшит в скомпилированное .exe-приложение, то крайне маловероятно, что тебе удастся прикрутить стороннюю либу без продажи души дьяволу. Также штатными средствами без поддержки юникода разбить строку на юникод-символы не представляется возможным, так как любая строка в Lua - это последовательность байт, воспринимаемых string-библиотекой в виде ASCII-символов.

     

    Однако это не значит, что проблема не решаема. Для начала тебе потребуется написать собственный костыль, разбивающий строку на составляющие байты и загоняющий их в байт-массив, делается это дефолтным string.byte() с указанным диапазоном:

     

    ...

     

    Безусловно, такой подход крайне неэффективен, но что поделать?

     

    Ребят , если кому интересно даю ответ, все мы копали не там!

     

    --Проверено в lua 5.0
     
     os.setlocale ("", "ctype") -- Добавляем волшебную строку перед выводом, указываем параметр, что бы не возникало проблем с цифрами!
    
    print("Оригинальное сообщение: " .. message)
    print("нижний регистр: " .. string.lower(message))
    print("ВЕРХНИЙ РЕГИСТР: " .. string.upper(message))

    Отпишу дальше, что получилось и поделюсь кодом, может кому то пригодиться.


  3.  

    Если Lua-интерпретатор вшит в скомпилированное .exe-приложение, то крайне маловероятно, что тебе удастся прикрутить стороннюю либу без продажи души дьяволу. Также штатными средствами без поддержки юникода разбить строку на юникод-символы не представляется возможным, так как любая строка в Lua - это последовательность байт, воспринимаемых string-библиотекой в виде ASCII-символов.

     

     

    Ругается на эту строку:

     

    attempt to index global `bit32' (a nil value)

     

    символы которые выделил чёрным, не пропускает без ковычек.

     

    if bit32.band(bit32.rshift(bytes, 8 - j), 0x1) == 0x0 then


  4. Делюсь наработкой:

     

    local word = {
    "мат",
    "mat"
    }
    
    if (string.find(message, "[A-z0-9][.][A-z0-9]")) then
    Message(player,"Обнаружена реклама, сообщение не отправлено!")
    return 0
    end
    
    for i = 1 , size(word), 1 do
    
    if (string.find(string.lower(message), word[i]) ~= nil) then
    Message(player,"Обнаружено плохое слово, сообщение не отправлено!")
    return 0
    end
    
    end

     
    И если написать слово так englis h то уже пропускает, как бы это решить есть идеи ?
     

    Вот такой простой вариант: ^[%w][%w%-%.%+]
    !Не работает с юникодом!
    А по поводу

    string.lower()
    юзай модуль unicode

     

     
    Я бы с радостью, да вот игра устарела и lua 5.0 вшито в .exe и обновить версию lua не представляется возможным.

     

    На данный момент проблемы 2!

     

    1) Перевести текст Unicode в нижний регистр.

     

    2) При пробелах находить это же слово, вот так М а т.


  5. Здравствуйте, возможно есть у кого то регулярное выражение на домены для lua, сам к сожалению не могу составить такое, пока не изучал регулярные выражения а именно интересует отсеивание ссылок любого типа от yandex.ru до яндекс.рф.



  6. Спасибо всем за ответы, буду работать над функцией ECS, если появятся новые идеи то с радостью рассмотрю их, вы правы слово из 3-х букв, можно написать очень многими способами, по этому фильтр почти не реальный, ну  я готов рискнуть, Модератор и так будет следить за чатом, просто хотелось бы какую то Автоматическую карающую машину создать)


  7. Здравствуйте!

    Хочу написать Фильтр Мата для игры, а именно русских слов , знаю, что это очень сложно, хочу спросить вашего совета, как лучше фильтровать мат!

     

    Функция чата примерно такая:

    function GameChat(player,message)    -- Функция чата.
      if (string.find(message, "fuck") ~= nil) then  -- Тут будет фильтроваться МАТ
      local block_time = 10    -- Время блокировки чата
      Message(player,"Ваш чат заблокирован на 10 минут за мат!")    -- Показываем уведомление игроку.
      BlockChat(player, block_time)    -- Блокируем чат игроку на 10 минут.
      return 0    -- Запрещаем выводить сообщение в чат.
    end
    return 1
    end
    

     

    Во первых есть проблемы со string.find, если банально написать Fuck он уже не поймает слово, как это можно решить ?

    И собственно , как лучше подключать сам цикл , что бы не сильно грузить систему и как лучше фильтровать сам мат, буду признателен за ваши ответы по теме.


  8. Всё работает, после того как взял целую функцию с того сайта.
     
    Вот эту:

     

     

    function comma_value(amount)
    local formatted = amount
    while true do
    formatted, k = string.gsub(formatted, "^(-?%d+)(%d%d%d)", '%1,%2')
    if (k==0) then
    break
    end
    end
    return formatted
    end

     

     

    Видимо это связанно как то с тем, что я использую lua 5.0, кстати есть ли возможность его обновить если он вшит в консоль игры ? 


  9. Мне нужно сделать, что бы значения больше 1000 разбивались запятыми допусти 1510 стало 1,510 и тд , думаю понятно, как это можно сделать средствами lua ?


  10. Спасибо за ответ, не совсем то , что надо, нужно следующее :

     

    Изначально в файле значение 5! -- только 5 ничего более

    Программа открывает файл - получает его значение в данном случае 5,

    Потом плюсует к этому значению допустим 4 и перезаписывает файл.

    И при следующем открытии должно выдать уже не 5 а 9!

     

    Не построчно!


  11. Здравствуйте друзья, проблема в следующем lua обращается к файлу и нужно что бы в следующий раз он получил значение из файла - добавил к нему новое и перезаписал, но lua просто дописывает значение в файл, просьба помочь.


  12. Допустим у меня длинная функция и вместо того что бы везде подставить #a #b #c #d я буду вынужден подставлять size(a) size(b) size© size(d), есть ли какое то более оптимальное решение ?

    Или для данной версии это максимум, чего можно достигнуть ?

    Так же большое спасибо за быстрый ответ.

×
×
  • Создать...