сравнивание текста из диалога

linmsqn

Участник
Автор темы
337
9
Версия MoonLoader
.026-beta
как можно реализовать сравнивание текста из луа файла и диалога? допустим у меня в диалоге текст Privet и в таблице скрипта тоже есть слово Privet, и если они сходятся то в чат пишет - подходит, а если в диалоге текст Poka, а в луа таблице его нету, то пишется не подходит. как реализовать такое?
 

SomaGnoma

Известный
443
151
мне бы пример кодом
Во код:
Lua:
local table = {
"Самперы",
"Модеры",
"Клео скриптеры"
}

local ev = require("samp.events")

function ev.onShowDialog(id, style, t, btn, btn2, text)
    -- допустим текст будет "Мозг"
    for i = 1, #table do -- перебираешь все элементы
        print(text == table[i] and "Текст совпадает" or "Текст разный") -- если "Мозг" равен элементу из таблицы то напишет соответственно
    end
end
 
  • Ха-ха
Реакции: darkmeleee

RedHolms

Известный
Проверенный
618
360
мне бы пример кодом
Тут зависит от того, от куда и что тебе надо парсить
Самый банальный пример:
Lua:
sampev = require "samp.events"
require "sampfuncs" -- Для стилей диалогов

-- Наша таблица со значениями, может подгружаться из файла, или т.п.
TextDatabase = {
    ["Dummy"] = "Edited text",
    ["Example"] = 42
}

function sampev.onShowDialog(id, style, title, button1, button2, text)
    --[[
        В нашем примере, мы представим, что в диалоге с ID = 0(!!! НЕ ИМЕЕТ НИЧЕГО ОБЩЕГО С РЕАЛЬНОСТЬЮ !!!)
        имеется текст формата:
        /*
            Message from Player_Nickname[0]
            Text: Any message
        */
        где:
        Player_Nickname - Ник игрока (в нашем случае не имеет значения)
        [0] - ИД игрока (в нашем случае не имеет значения)
        Any message - Сообщение, которое мы хотим достать
    ]]
    -- Строки в диалогах разделены \n
    -- Для удобства, поскольку мы точно знаем, что нужный нам текст находится во второй строке, то
    -- разбиваем текст диалога на строки, заносим их в таблицу, и парсим именно 2-ю строку
    local dialogLines = {}
    for w in text:gmatch("[^\r\n]") do
        table.insert(dialogLines, w)
    end

    local messageTextLine = dialogLines[2] -- В Lua индексы начинаются с 1!
    -- Если мы посмотрим на 2-ю строку, то увидим, что в начале строки есть:
    -- Text:
    -- За ним следует информация, которую нам необходимо получить, для начала, проверим,
    -- а действительно ли строка содержит нужную нам информацию
    if messageTextLine:match('Text: .+') then
        -- Мы проверили, теперь получаем сам текст сообщения
        local message = messageTextLine:match('Text: (.+)')
        -- Воуля! Мы достали нужную нам информацию, теперь может делать с ней любые манипуляции
        -- Например, будем брать значение из таблицы по данному тексту, и выводить его
        -- А если ничего не найдено, писать ошибку
        if TextDatabase[message] then -- Проверяем, содержит ли таблица TextDatabase значение по нашему тексту
            print("Text " .. message .. " = " .. TextDatabase[message])
        else -- Если в таблице нету значения на тексту
            print("Text " .. message .. " don't have value")
        end
    end
end

Для парсинга диалога в реальных условиях могут потребоваться более сложные паттерны, тут уже индивидуально для каждого диалога и сервера
 
  • Bug
Реакции: SomaGnoma