Lua Samp Events. Работа с Patterns.

DGarson

Участник
Автор темы
66
19
Версия MoonLoader
.027.0-preview
Привет, несколько суток гулял по простору BlastHack'а и не нашел гайда, который бы мог помочь с этой сложной ситуацией. Мог бы кто помочь с пониманием таких функций как:
text:match и работа с внутренними Lua Patterns.
Использование этих паттернов в sampAddChatMessage.
 
Решение
Возьмем пример, сервер отравляет в чат сообщение,
"{Все красным}[R] Senior Special Agent Dmitry_Babkov[0]: Привет!"
Да, можно сделать поиск по
Lua:
if string.find( text,"[R]", 1, true )  then
Но, любое сообщение с [R] будет poke.
Так вот, суть в том, что-б через text:match выполнить максимально точную проверку. (не берем в учёт цвета).

а потом вывести текст -
{Любым цветом} Senior Special Agent Dmitry_Babkov: {Желтым} Привет!
Lua:
text = "[R] Senior Special Agent Dmitry_Babkov[0]: Привет!" --Представим это с хука прилетело
if text:find("%[R%] (.+) (.+)%[(%d+)%]: (.+)") then --[[ [] нужно экранировать при помощи %, так как это "магические символы".
                                                        Цифры заменим на...

DGarson

Участник
Автор темы
66
19
Не понимаю что тебе конкретно надо. Дай пример. Покажу код и объясню.
Возьмем пример, сервер отравляет в чат сообщение,
"{Все красным}[R] Senior Special Agent Dmitry_Babkov[0]: Привет!"
Да, можно сделать поиск по
Lua:
if string.find( text,"[R]", 1, true )  then
Но, любое сообщение с [R] будет poke.
Так вот, суть в том, что-б через text:match выполнить максимально точную проверку. (не берем в учёт цвета).

а потом вывести текст -
{Любым цветом} Senior Special Agent Dmitry_Babkov: {Желтым} Привет!
 

Fott

Простреленный
3,469
2,390
Возьмем пример, сервер отравляет в чат сообщение,
"{Все красным}[R] Senior Special Agent Dmitry_Babkov[0]: Привет!"
Да, можно сделать поиск по
Lua:
if string.find( text,"[R]", 1, true )  then
Но, любое сообщение с [R] будет poke.
Так вот, суть в том, что-б через text:match выполнить максимально точную проверку. (не берем в учёт цвета).

а потом вывести текст -
{Любым цветом} Senior Special Agent Dmitry_Babkov: {Желтым} Привет!
Lua:
text = "[R] Senior Special Agent Dmitry_Babkov[0]: Привет!" --Представим это с хука прилетело
if text:find("%[R%] (.+) (.+)%[(%d+)%]: (.+)") then --[[ [] нужно экранировать при помощи %, так как это "магические символы".
                                                        Цифры заменим на регулярку которая берет только цифры, то есть %d+, а там где у нас слова заменим на .+
                                                        обернем наши регулярки в скобки чтобы получить содержимое через match]]
    rang, nick, id, msg = text:match("%[R%] (.+) (.+)%[(%d+)%]: (.+)") -- распределяем содержимое по переменным
    print(rang, nick, id, msg) -- выводим. На выходе у нас << Senior Special Agent    Dmitry_Babkov    0    Привет!
end