чтение полной фразы, а не слова

floriangeyer

Новичок
Автор темы
1
0
Версия MoonLoader
Другое
всем привет. в луа не шарю и никогда не буду шарить, поэтому и вопрос нормально не смог написать.
в чём суть: скрипт должен выводить определённое слово в ответ на текст в сампе, к примеру: "республика мамля" - "президент бибирка", страна - президент. условно. вот например 2 строки скрипта

код:
 ["республика мамля"] = "президент бибирка",
 ["мамля"] = "император дубинатор"


- так как обычная мамля идёт второй строкой, увидя "мамлю" - луа мне выдаст президента бибирку, а не императора дубинатора; "республика" не имеет значения тут.
вот у меня и вопрос: как сделать так, чтобы читалась вся фраза и конкретно на неё и давался ответ, а не на слова отдельно.
вопрос может показаться глупым, но я же не луашник какойта(
 

floriangeyer1

Новичок
1
0
==, а не string.find(...)?
второе...

код:
function sampev.onServerMessage(color, msg)
    if status then
        local lwr = string.lower(msg);
        for k, v in pairs(ARRAY_LEAVE_FROM_CHAT) do
      
            if string.find(lwr, k) then
                lua_thread.create(function()
                    wait(waiting for);
                    sampSendChat(v);
                end)
                break;
            end
          
        end 
    end
end
основу взял из бласта. если я что-то не так делаю - пожалуйста, скажи, что, и если не трудно, подправь) как и говорил, луа для меня это вообще пипец.
 
Последнее редактирование:

XRLM

Известный
2,560
877
второе...

код:
function sampev.onServerMessage(color, msg)
    if status then
        local lwr = string.lower(msg);
        for k, v in pairs(ARRAY_LEAVE_FROM_CHAT) do
     
            if string.find(lwr, k) then
                lua_thread.create(function()
                    wait(waiting for);
                    sampSendChat(v);
                end)
                break;
            end
         
        end
    end
end
основу взял из бласта. если я что-то не так делаю - пожалуйста, скажи, что, и если не трудно, подправь) как и говорил, луа для меня это вообще пипец.
я думаю что проще это делать без цикла for, а просто через text:match, в твоем случае msg:match
 

ewin

Известный
675
369
второе...

код:
function sampev.onServerMessage(color, msg)
    if status then
        local lwr = string.lower(msg);
        for k, v in pairs(ARRAY_LEAVE_FROM_CHAT) do
     
            if string.find(lwr, k) then
                lua_thread.create(function()
                    wait(waiting for);
                    sampSendChat(v);
                end)
                break;
            end
         
        end
    end
end
основу взял из бласта. если я что-то не так делаю - пожалуйста, скажи, что, и если не трудно, подправь) как и говорил, луа для меня это вообще пипец.
слишком большой код, все можно вместить в строк 5
 

Tema05

Известный
1,442
402
всем привет. в луа не шарю и никогда не буду шарить, поэтому и вопрос нормально не смог написать.
в чём суть: скрипт должен выводить определённое слово в ответ на текст в сампе, к примеру: "республика мамля" - "президент бибирка", страна - президент. условно. вот например 2 строки скрипта

код:
 ["республика мамля"] = "президент бибирка",
 ["мамля"] = "император дубинатор"


- так как обычная мамля идёт второй строкой, увидя "мамлю" - луа мне выдаст президента бибирку, а не императора дубинатора; "республика" не имеет значения тут.
вот у меня и вопрос: как сделать так, чтобы читалась вся фраза и конкретно на неё и давался ответ, а не на слова отдельно.
вопрос может показаться глупым, но я же не луашник какойта(
При твоих условиях это невозможно. Кодом показал ассоциативный массив. Но к сожалению в lua никак не возможно отсортировать ассоциативный массив по ключам. Насколько я понял ты решаешь проблему с нахождением одновременно 2 слов тем что сначала хочешь проверить полный вариант "республика мамля", а потом уже "мамля" и берёшь первое совпадение. Но при переборе массива поочередность может быть не такой, как записано в коде. Только поэтому код работает неверно. Тебе нужно использовать другую структуру хранения ответов без необходимости перебора ассоциативного массива.

Например можно сделать массив с массивами из 2 элементов. Первый это то что ищем, а второй это то что нужно вывести.
Lua:
--Массив с словами для поиска и ответами
local arr = [
    ["республика мамля","президент бибирка"],
    ["мамля","император дубинатор"]
]


--Входной текст в котором нужно найти совпадения
local text = "Небольшая республика мамля самая богатая в мире."


for i, v in ipairs(arr) do --перебираем массив с массивами из 2 элементов
    if text:find(v[1], 1, true) then --Ищем 1 элемент в тексте (последние 2 параметра нужны для отключения регулярных выражений при поиске)
        print(v[2]) --если нашли выводим 2 элемент
        break --Завершаем цикл чтобы не найти другие совпадения
    end
end
ВАЖНО! Всё будет работать корректно только если слова для поиска, которые являются часть других слов будут прописаны дальше по массиву чем те слово частью, которого оно является.