Говноматч

Daniel_Pon

Активный
Автор темы
337
67
Версия MoonLoader
Другое
Lua:
local function extractAndSolve(message)
    -- Ищем пример с операцией + или -
    local example = message:match("пример%s+(%d+)%s*([+%-])%s*(%d+)")
    
    if example then
        -- Извлекаем числа и оператор из одной строки
        local num1, operator, num2 = example:match("(%d+)%s*([+%-])%s*(%d+)")
        
        if num1 and operator and num2 then
            num1 = tonumber(num1)
            num2 = tonumber(num2)
            local answer
            
            
            if operator == "+" then
                answer = num1 + num2
            elseif operator == "-" then
                answer = num1 - num2
            end

            return answer
        end
    end
    return nil
end

function sampev.onServerMessage(color, text)
    
    if text:find("Кто первый решит пример") then
      
        local answer = extractAndSolve(text)
        sampAddChatMessage (answer, -1)
        
    end
end

Если у меня в чат выводится например "Кто первый решит пример 183 - 118", то в чат ничего не пишется(ну точнее пустая строчка), сос ми
 
Решение
Спасибо, а что делать если между числами есть пробел?

И после этого примера есть дальше текст. Например:
Кто первый решит пример 8282 - 823, получит по жопе! (И еще дальше текст)
вроде и такое сработает
("Кто первый решит пример (.+%d+)")

MLycoris

На вид оружие массового семяизвержения
Проверенный
1,981
2,192
хз попробуй, по идее работает не только с плюсом и минусом
Lua:
local sampev = require('lib.samp.events')
function sampev.onServerMessage(color, text)
    local primer = text:gsub("{......}", ""):match("Кто первый решит пример (.+)")
    if primer then
        local result, answer = pcall(load('return '..primer))
        if result then
            sampAddChatMessage(answer, -1)
        end
    end
end
 

Daniel_Pon

Активный
Автор темы
337
67
хз попробуй, по идее работает не только с плюсом и минусом
Lua:
local sampev = require('lib.samp.events')
function sampev.onServerMessage(color, text)
    local primer = text:gsub("{......}", ""):match("Кто первый решит пример (.+)")
    if primer then
        local result, answer = pcall(load('return '..primer))
        if result then
            sampAddChatMessage(answer, -1)
        end
    end
end
Спасибо, а что делать если между числами есть пробел?

И после этого примера есть дальше текст. Например:
Кто первый решит пример 8282 - 823, получит по жопе! (И еще дальше текст)
 

MLycoris

На вид оружие массового семяизвержения
Проверенный
1,981
2,192
Спасибо, а что делать если между числами есть пробел?

И после этого примера есть дальше текст. Например:
Кто первый решит пример 8282 - 823, получит по жопе! (И еще дальше текст)
вроде и такое сработает
("Кто первый решит пример (.+%d+)")
 
  • Нравится
Реакции: Daniel_Pon

wojciech?

Известный
Проверенный
395
291
Lua:
local t = {
    "1 + 2",
    "5 - 6",
    "Решите пример: (5 - 6) * 2 * -1",
    "Кто первый решит пример 10 ^ 5 / 100 + -5 / 2 получит бан"
}

for i, text in ipairs(t) do
    print(text)
    local equation = text:gsub(" ", ""):match("([%d%.%(%)%+%-%*%/%^]+)")
    if equation then
        local result, output = pcall(load("return " .. equation))
        if result then
            print(("[output] %s = %s\n"):format(equation, output))
        end
    end
end


Код:
1 + 2
[output] 1+2 = 3

5 - 6
[output] 5-6 = -1

Решите пример: (5 - 6) * 2 * -1
[output] (5-6)*2*-1 = 2

Кто первый решит пример 10 ^ 5 / 100 + -5 / 2 получит бан
[output] 10^5/100+-5/2 = 997.5

[Finished in 109ms]
 
  • Нравится
Реакции: Daniel_Pon

kultizdat.

Известный
158
12
хз попробуй, по идее работает не только с плюсом и минусом
Lua:
local sampev = require('lib.samp.events')
function sampev.onServerMessage(color, text)
    local primer = text:gsub("{......}", ""):match("Кто первый решит пример (.+)")
    if primer then
        local result, answer = pcall(load('return '..primer))
        if result then
            sampAddChatMessage(answer, -1)
        end
    end
end
А для чего нужен pcall?
Не понимаю :с