Помогите пожалуйста написать функцию на lua для Arizona RP

sacascwe1

Новичок
Автор темы
4
0
Добрый День! Помогите пожалуйста написать функцию, которая проверяет чат и если сообщение в моем списке, то заменяет его на !!!. Жеалтельно с обьяснениями и комментариями. Спасибо.

Пример, который я смог сделать:
function samp.onServerMessage()
if text:find(samp.onServerMessage) in my_list then
return text(samp.onServerMessage * !!!)
end
end
 

[01] Rafael Kingstrom

Участник
83
17
Добрый День! Помогите пожалуйста написать функцию, которая проверяет чат и если сообщение в моем списке, то заменяет его на !!!. Жеалтельно с обьяснениями и комментариями. Спасибо.

Пример, который я смог сделать:
function samp.onServerMessage()
if text:find(samp.onServerMessage) in my_list then
return text(samp.onServerMessage * !!!)
end
end
какое именно сообщение в твоем списке он должен заменять на !!!
 

БеzликиЙ

Автор темы
Проверенный
1,792
1,035
lua:
local ev = require "samp.events"

local my_messages = {
   "Ебать-колотить",
   "Хули надо",
}

function ev.onServerMessage(color, text) -- важно, передаётся цвет и текст сообщения, именно в таком порядке
    for i,v in pairs(my_messages) do -- pairs(таблица) проходится по всем записям в таблице, и на каждую возвращает два значения: i - её индекс, номер, название; и v - её значение
        if string.find(text, v) then -- если в полученном сообщении нашёлся текст из проверяемой сейчас записи в таблице, то
            return {color, "!!!"} --    … возвращаем сообщение "!!!" вместо исходного, параметры нужно передавать в том же порядке и таблицей
        end
    end
end

рекомендую почитать документацию по библиотеке string, потому что правый параметр функции string.find может содержать специальные символы, а значит, одно выражение может реагировать на несколько разных строк. например, "[лп]апка" будет реагировать на "лапка" и "папка", но не "палка", а "псих%s+еб%dанутый" будет реагировать на "псих еб3анутый", "псих еб2анутый", "псих еб8анутый", но не "психеб69анутый"
 

sacascwe1

Новичок
Автор темы
4
0
lua:
local ev = require "samp.events"

local my_messages = {
   "Ебать-колотить",
   "Хули надо",
}

function ev.onServerMessage(color, text) -- важно, передаётся цвет и текст сообщения, именно в таком порядке
    for i,v in pairs(my_messages) do -- pairs(таблица) проходится по всем записям в таблице, и на каждую возвращает два значения: i - её индекс, номер, название; и v - её значение
        if string.find(text, v) then -- если в полученном сообщении нашёлся текст из проверяемой сейчас записи в таблице, то
            return {color, "!!!"} --    … возвращаем сообщение "!!!" вместо исходного, параметры нужно передавать в том же порядке и таблицей
        end
    end
end

рекомендую почитать документацию по библиотеке string, потому что правый параметр функции string.find может содержать специальные символы, а значит, одно выражение может реагировать на несколько разных строк. например, "[лп]апка" будет реагировать на "лапка" и "папка", но не "палка", а "псих%s+еб%dанутый" будет реагировать на "псих еб3анутый", "псих еб2анутый", "псих еб8анутый", но не "психеб69анутый"
Спасибо огромное

lua:
local ev = require "samp.events"

local my_messages = {
   "Ебать-колотить",
   "Хули надо",
}

function ev.onServerMessage(color, text) -- важно, передаётся цвет и текст сообщения, именно в таком порядке
    for i,v in pairs(my_messages) do -- pairs(таблица) проходится по всем записям в таблице, и на каждую возвращает два значения: i - её индекс, номер, название; и v - её значение
        if string.find(text, v) then -- если в полученном сообщении нашёлся текст из проверяемой сейчас записи в таблице, то
            return {color, "!!!"} --    … возвращаем сообщение "!!!" вместо исходного, параметры нужно передавать в том же порядке и таблицей
        end
    end
end

рекомендую почитать документацию по библиотеке string, потому что правый параметр функции string.find может содержать специальные символы, а значит, одно выражение может реагировать на несколько разных строк. например, "[лп]апка" будет реагировать на "лапка" и "папка", но не "палка", а "псих%s+еб%dанутый" будет реагировать на "псих еб3анутый", "псих еб2анутый", "псих еб8анутый", но не "психеб69анутый"
Помогите пожалуйста, в логах moonloadera нет скрипта, не загружается, хотя находится в папке Moonloadera, может его надо перекинуть в lib?
Играю если что с лаунчера Аризоны
Сам код скрипта ниже:
require('lib.moonloader')
local ev = require "samp.events"
local my_messages = {
"Ебать-колотить",
"авто",
}
function main()
while not isSampAvailable() do wait(0) end
sampAddChatMessage('Скрипт загружен', 0xFFff0000)
while true do
wait(0)
for i, v in pairs(my_messages) do
if string.find(text, v) then
return {color, "!!!"}
end
end
end

Спасибо огромное за помощь!
 
Последнее редактирование:

БеzликиЙ

Автор темы
Проверенный
1,792
1,035
Спасибо огромное


Помогите пожалуйста, в логах moonloadera нет скрипта, не загружается, хотя находится в папке Moonloadera, может его надо перекинуть в lib?
Играю если что с лаунчера Аризоны
Сам код скрипта ниже:
require('lib.moonloader')
local ev = require "samp.events"
local my_messages = {
"Ебать-колотить",
"авто",
}
function main()
while not isSampAvailable() do wait(0) end
sampAddChatMessage('Скрипт загружен', 0xFFff0000)
while true do
wait(0)
for i, v in pairs(my_messages) do
if string.find(text, v) then
return {color, "!!!"}
end
end
end

Спасибо огромное за помощь!
ну правильно, ты натворил какую-то хуйню. где переменная text, к которой обращается string.find? почему ты вообще делаешь этот поиск в мейне?
 

sacascwe1

Новичок
Автор темы
4
0
Здравствуйте, спасибо еще раз, все работает, но:
1. Не работает с русским языком
2. Если заменяет слово, то он его заменит полностью, и со словом и с ником и айдишником
Вот, сам код, очень вам благодарен:
require('lib.moonloader')
local ev = require "samp.events"
local my_messages = {
"scrip",
"авто",
}
-- Функция для проверки сообщения
function ev.onServerMessage(color, text)
for i, v in pairs(my_messages) do
if string.find(text, v) then
-- Возвращаем изменённое сообщение
return {color, "!!!"}
end
end
-- Если ничего не найдено, возвращаем исходные параметры
return {color, text}
end
-- Инициализация скрипта в отдельной корутине
function main()
wait(0)
while not isSampAvailable() do
wait(100)
end
sampAddChatMessage('script ready', 0xFFff0000)

-- Основной цикл скрипта (если нужен для других задач)
while true do
wait(0)
-- Здесь можно разместить другой код, который требует wait()
end
end
 

БеzликиЙ

Автор темы
Проверенный
1,792
1,035
будешь срать мне в лс каждый раз, как пишешь сюда что-то новое - кину тему в игнор и будешь разбираться самостоятельно.

с русским языком работает, ты просто скрипт сохраняешь в utf-8, а надо в cp1251.

а ещё я тебе советовал читать документацию, ты этого почему-то не делаешь. тут же чёрным по белому написано, что для замены конкретного выражения на другое можно использовать string.gsub. думайте
1769168506286.png
 

sacascwe1

Новичок
Автор темы
4
0
будешь срать мне в лс каждый раз, как пишешь сюда что-то новое - кину тему в игнор и будешь разбираться самостоятельно.

с русским языком работает, ты просто скрипт сохраняешь в utf-8, а надо в cp1251.

а ещё я тебе советовал читать документацию, ты этого почему-то не делаешь. тут же чёрным по белому написано, что для замены конкретного выражения на другое можно использовать string.gsub. думайте
Посмотреть вложение 285364
понял все получилось, спасибо, а где можно найти список функций типо такого onServerMessage
 

БеzликиЙ

Автор темы
Проверенный
1,792
1,035
понял все получилось, спасибо, а где можно найти список функций типо такого onServerMessage
обычные функции игры на https://wiki.blast.hk/ , функции библиотек (например, onServerMessage из samp.events) внутри lua файликов в самой библиотеке (в нашем случае moonloader/lib/samp/events.lua)
1769178255033.png