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

matsubaru

Новичок
Автор темы
19
2
Версия MoonLoader
Другое
Приветствую, нужно, чтобы в чат выводило номер игрока, но оно не выводит, возможно это из-за разных цветов.
Lua:
local samp = require 'lib.samp.events'

function samp.onServerMessage(color, text)
    if text:find('^%*Номер игрока%s*%S+%[%d+%]:%s(%d+)') then
        local number = text:match('^%*Номер игрока%s*%S+%[%d+%]:%s(%d+)')
        sampAddChatMessage(number, -1)
    end
end
Снимок экрана 2023-06-10 205016.png
 
Решение
Lua:
local samp = require 'lib.samp.events'

function samp.onServerMessage(color, text)
    if text:gsub('{......}',''):find('Номер игрока .+%[%d+%]%: .+') then
        lua_thread.create(function() wait(100) -- чтоб оно из чата не исчезало
            local number = text:gsub('{......}',''):match('Номер игрока .+%[%d+%]%: (%d+)')
            sampAddChatMessage(number,-1)
        end)
    end
end

MLycoris

Режим чтения
Проверенный
1,863
1,963
Lua:
local samp = require 'lib.samp.events'

function samp.onServerMessage(color, text)
    if text:gsub('{......}',''):find('Номер игрока .+%[%d+%]%: .+') then
        lua_thread.create(function() wait(100) -- чтоб оно из чата не исчезало
            local number = text:gsub('{......}',''):match('Номер игрока .+%[%d+%]%: (%d+)')
            sampAddChatMessage(number,-1)
        end)
    end
end
 
  • Нравится
Реакции: matsubaru и YarikVL

YarikVL

Известный
Проверенный
4,795
1,814
Приветствую, нужно, чтобы в чат выводило номер игрока, но оно не выводит, возможно это из-за разных цветов.
Lua:
local samp = require 'lib.samp.events'

function samp.onServerMessage(color, text)
    if text:find('^%*Номер игрока%s*%S+%[%d+%]:%s(%d+)') then
        local number = text:match('^%*Номер игрока%s*%S+%[%d+%]:%s(%d+)')
        sampAddChatMessage(number, -1)
    end
end
Посмотреть вложение 204290
Между 3 и 4 строками:
local text = text:gsub("{……}","")

А вообще регулярку делают по строчке с чатлога, но без чатлога могу предложить это:
Lua:
if text:find('%*(.*)Номер игрока (.+)%[(%d+)%]: (%d+)') then
    lua_thread.create(function() wait(200)
        local _, nick, id, number = text:match('%*(.*)Номер игрока (.+)%[(%d+)%]: (%d+)')
        sampAddChatMessage(number, -1)
    end)
end

'Номер игрока .+%[%d+%]%: .+'
Двоеточие не нужно экранировать, нужно только спец символы, то есть вот эти:
( ) . % + - * ? [ ] ^ $
Но наверное это не повлияет на поиск строчки, так как в онлайн компиляторе даже с % перед двоеточием находит текст:
IMG_2784.jpeg
lua_thread.create(function() wait(100) -- чтоб оно из чата не исчезало
Может немного я тебя не понял, но поток и задержку перед отправкой sampSendChat в событии onServerMessage делают чтобы у пользователей с ненормальным пингом успело отобразится сообщение в чате, а только потом отправлялось сообщение в чат.
Кстати, я об этом забыл и сейчас подправил свой код.
 
Последнее редактирование:
  • Нравится
Реакции: MLycoris и matsubaru