help me onServerMessage

D

deleted-user-521927

Гость
Автор темы
Версия MoonLoader
.026-beta
Всем привет, захотелось написать скрипт который при виде текста в чате отвечал бы на него сам.

Читал вот эту статью, чуток разобрался, но при добавлении разных слов начинается флуд, то есть:

lua:
local samp = require 'lib.samp.events'

function samp.onServerMessage(color, text)
    lua_thread.create(function()
        if text:find('Привет') then
            wait(1000)
            sampSendChat('Привет')
        end
    end)
    lua_thread.create(function()
        if text:find('Ку') then
            wait(1000)
            sampSendChat('Кулити')
        end
    end)
    lua_thread.create(function()
        if text:find('Салам') then
            wait(1000)
            sampSendChat('Салам')
        end
    end)
end

Если я оставлю только одно условие (может я неверно это называю, но думаю вы поймёте меня) то нет никакого флуда, скрипт работает отлично, но..

Мне нужно сделать так, чтобы после того как в чате появилось слово из if text:find не было флуда. Скорее всего я не понял как правильно сделать много этих условий (слов).

И ещё есть вопрос, возможно ли сделать так чтобы при слове "Привет" скрипт отвечал рандомными вариантами которые можно указать в скрипте?
 
Решение
Lua:
local array = {
    ["Привет"] = "Привет",
    ["Салам"] = "Салам",
    ["Ку"] = "Кулити",
}

function samp.onServerMessage(color, text)
    for k, v in pairs(array) do -- Парсим массив.
        if text:find(".*%[%d+%] говорит:%{......%} "..k) then -- Если в text найдено слово из левого столбика (k).
            lua_thread.create(function() wait(1000) -- Ставим задержку.
                sampSendChat(v) -- Отправляем текст из правого столбика (v).
            end)
        end
    end
end

-- code by Dmitriy Makarov
если хочешь делать проверку на ник, или на ид допустим

Lua:
function samp.onServerMessage(color, text)
    for k, v in pairs(array) do -- Парсим массив.
        if text:find("(.*)%[(%d+)%] говорит:%{......%} "..k) then --...

Dmitriy Makarov

25.05.2021
Проверенный
2,500
1,130
Поступи проще - через массив.
Lua:
local array = {
    ["Привет"] = "Привет",
    ["Салам"] = "Салам",
    ["Ку"] = "Кулити",
}

function samp.onServerMessage(color, text)
    for k, v in pairs(array) do -- Парсим массив.
        if text:find(k) then -- Если в text найдено слово из левого столбика (k).
            lua_thread.create(function() wait(1000) -- Ставим задержку.
                sampSendChat(v) -- Отправляем текст из правого столбика (v).
            end)
        end
    end
end
Вот так вроде должно работать.
 
D

deleted-user-521927

Гость
Автор темы
Вот так вроде должно работать.
Пишу Привет, и что-то всё равно флудит

sa-mp-000.png
 

Dmitriy Makarov

25.05.2021
Проверенный
2,500
1,130
Пишу Привет, и что-то всё равно флудит

Посмотреть вложение 215343
Может он на твой "Привет" тоже реагирует и получается бесконечный цикл?) Замени в 1 тексте ответ на другой.
["Привет"] = "Хай",

Не обязательно указывать название в массиве.
Мм?
 

tfornik

Известный
325
260
  • Нравится
Реакции: deleted-user-521927
D

deleted-user-521927

Гость
Автор темы
Может он на твой "Привет" тоже реагирует и получается бесконечный цикл?)
Да, спасибо, помогло. Но при написании "Ку' отвечает "Кулити" и снова флудит XD. Я так понимаю он реагирует на первые 2 буквы? То есть не получится сделать слова похожими друг на друга (например: Привет - Приветик)?
 

plalkeo

Известный
688
260
Да, спасибо, помогло. Но при написании "Ку' отвечает "Кулити" и снова флудит XD. Я так понимаю он реагирует на первые 2 буквы? То есть не получится сделать слова похожими друг на друга (например: Привет - Приветик)?
можно сделать такое, если полностью сверять написанный текст в чате (то что после "говорит: ")
 
D

deleted-user-521927

Гость
Автор темы
можно сделать такое, если полностью сверять написанный текст в чате (то что после "говорит: ")
Сложно реализовать? Нужно добавить условие, я правильно понимаю?
 

tfornik

Известный
325
260
Lua:
local array = {
    ["Привет"] = "Привет",
    ["Салам"] = "Салам",
    ["Ку"] = "Кулити",
}

function samp.onServerMessage(color, text)
    for k, v in pairs(array) do -- Парсим массив.
        if text:find(".*%[%d+%] говорит:%{......%} "..k) then -- Если в text найдено слово из левого столбика (k).
            lua_thread.create(function() wait(1000) -- Ставим задержку.
                sampSendChat(v) -- Отправляем текст из правого столбика (v).
            end)
        end
    end
end

-- code by Dmitriy Makarov
если хочешь делать проверку на ник, или на ид допустим

Lua:
function samp.onServerMessage(color, text)
    for k, v in pairs(array) do -- Парсим массив.
        if text:find("(.*)%[(%d+)%] говорит:%{......%} "..k) then -- Если в text найдено слово из левого столбика (k).
            local nick,id = text:match("(.*)%[(%d+)%] говорит:%{......%} "..k) 
            if nick == "Test_Test" then -- Если хочешь проверку на ник
                lua_thread.create(function() wait(1000) -- Ставим задержку.
                    sampSendChat(v) -- Отправляем текст из правого столбика (v).
                end)
            end
            if id == "123" then -- Если хочешь проверку на ID
                lua_thread.create(function() wait(1000) -- Ставим задержку.
                    sampSendChat(v) -- Отправляем текст из правого столбика (v).
                end)
            end
        end
    end
end
Учти, что id = string. Если будешь сравнивать с integer, фигачь id = tonumber(id)
я думаю всё понятно объяснил
 
  • Нравится
Реакции: deleted-user-521927