Регулярные выражения в lua

Crazy Aim

Участник
Автор темы
29
1
Версия MoonLoader
.026-beta
Можно объяснить вообще как ими работать?
например "[A] Nikita_Immortal[1]: /kick 28 test"
правильно ли вот так будет?
"^%[A%] (%w+_?%w+)%[(%d+)%]%: (.*)"
 
Решение
Lua:
local SEAvailable, SE = pcall(require, 'samp.events') -- require SAMP Events

if SEAvailable then -- if SAMP Events is available
  function SE.onServerMessage(color, text) -- creating message hook
      local nick, id, string = text:match("^%[A%]%s*(%S+)%[(%d+)%]:%s*(.+)")
      if nick and id and string then -- if message is under pattern
      local command, params = string:match("^/(%S+)%s*(.+)")
      if command and params then -- if message contains command with params
          if command:find('kick') then -- if this command is kick, then check params
          local kickId, kickReason = params:match("^(%d+)%s*(.+)")
          if kickId and kickReason then
            sampSendChat('/kick '..kickId..' '..kickReason)...

Crazy Aim

Участник
Автор темы
29
1
Lua:
local string = "[A] Nikita_Immortal[1]: /kick 28 test"
local nick, id, text = string:match("^%[A%]%s*(%S+)%[(%d+)%]:%s*(.+)")
можешь ли сделать функцию автоформа(которая будет при виде этого выполнять команду эту)? типа я не могу понять как правильно сделать ибо у меня он не может найди как понимаю текст
 

Pakulichev

Software Developer & System Administrator
Друг
1,789
2,133
Lua:
local SEAvailable, SE = pcall(require, 'samp.events') -- require SAMP Events

if SEAvailable then -- if SAMP Events is available
  function SE.onServerMessage(color, text) -- creating message hook
      local nick, id, string = text:match("^%[A%]%s*(%S+)%[(%d+)%]:%s*(.+)")
      if nick and id and string then -- if message is under pattern
      local command, params = string:match("^/(%S+)%s*(.+)")
      if command and params then -- if message contains command with params
          if command:find('kick') then -- if this command is kick, then check params
          local kickId, kickReason = params:match("^(%d+)%s*(.+)")
          if kickId and kickReason then
            sampSendChat('/kick '..kickId..' '..kickReason)
          else
            sampSendChat('/a Указаны неверные параметры: [ID] [Причина]!')
          end
        end
      end
    end
  end
end
 
  • Нравится
Реакции: Crazy Aim

Crazy Aim

Участник
Автор темы
29
1
Lua:
local SEAvailable, SE = pcall(require, 'samp.events') -- require SAMP Events

if SEAvailable then -- if SAMP Events is available
  function SE.onServerMessage(color, text) -- creating message hook
      local nick, id, string = text:match("^%[A%]%s*(%S+)%[(%d+)%]:%s*(.+)")
      if nick and id and string then -- if message is under pattern
      local command, params = string:match("^/(%S+)%s*(.+)")
      if command and params then -- if message contains command with params
          if command:find('kick') then -- if this command is kick, then check params
          local kickId, kickReason = params:match("^(%d+)%s*(.+)")
          if kickId and kickReason then
            sampSendChat('/kick '..kickId..' '..kickReason)
          else
            sampSendChat('/a Указаны неверные параметры: [ID] [Причина]!')
          end
        end
      end
    end
  end
end
Слушай не работает)
 

Carrentine

Потрачен
569
460
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Я проверю через несколько минут и отпишу.
sampSendChat() отправляет сообщение средствами ракнета, в сампфунксе есть такой баг, что нельзя хукнуть что - то внутри другого хука.
Нужно создавать отдельный поток, и там отправлять.
 

Pakulichev

Software Developer & System Administrator
Друг
1,789
2,133
sampSendChat() отправляет сообщение средствами ракнета, в сампфунксе есть такой баг, что нельзя хукнуть что - то внутри другого хука.
Нужно создавать отдельный поток, и там отправлять.
Очень странно, потому что у меня всё работает 🤔
 

Pakulichev

Software Developer & System Administrator
Друг
1,789
2,133
Кхм а в чём может быть проблема тогда?
Я только что проверил скрипт у себя и всё замечательно работает. Может быть шаблон сообщения неверный, там нет никаких HEX-кодов внутри?
 

Crazy Aim

Участник
Автор темы
29
1
Я только что проверил скрипт у себя и всё замечательно работает. Может быть шаблон сообщения неверный, там нет никаких HEX-кодов внутри?
я ща переписал чуток и заработала, только теперь при этом походу мне пишет Не флудите
 

Pakulichev

Software Developer & System Administrator
Друг
1,789
2,133
я ща переписал чуток и заработала, только теперь при этом походу мне пишет Не флудите
Если другой администратор будет писать, не должно так писать. Это всё по той причине, что команда исполняется сразу после ещё одной практически без задержки.
 

Crazy Aim

Участник
Автор темы
29
1
Если другой администратор будет писать, не должно так писать. Это всё по той причине, что команда исполняется сразу после ещё одной практически без задержки.
а можно как то из файла ini вытаскивать какие команды обрабатывать? на эту же функцию