Поиск строки в диалоге и фиксация числа

JHennessy

Известный
Автор темы
13
5
Приветствую, не могу разобраться как сделать поиск в диалоге текста, банально даже ничего не происходит когда открывается диалог.
Пробовал сделать так, может поскажите как лучше сделать.
Lua:
function sampev.onDialog(dialogId, dialogStyle, dialogTitle, dialogText)
    -- Проверяем, если текущий диалог совпадает с целевым ID
    if dialogId == targetDialogId then
        -- Печатаем текст диалога для отладки
        sampAddChatMessage("Текст диалога: " .. dialogText, -1)

        -- Ищем баланс в тексте диалога
        local balance = dialogText:match(u8"Баланс на оплату энергии%s-[73B461]$([%d]+)")
        if balance then
            balance = tonumber(balance)
            if balance then
                -- Отправляем сообщение в чат с найденным балансом
                sampAddChatMessage("Найден баланс: " .. balance, -1)
            else
                sampAddChatMessage("Не удалось конвертировать баланс в число", -1)
            end
        else
            sampAddChatMessage("Не удалось найти баланс в тексте", -1)
        end
    end
end

Сделать мне нужно в этом диалоге, а конкретно чтобы скрипт распознавал строку "[73B461]-[ffffff] Баланс на оплату энергии [73B461]$17298910" и вытаскивал оттуда число
[DialogInfo]: Dialog ID: 27009
[DialogInfo]: Dialog Title: [BFBBBA][73B461]Электроэнергия
[DialogInfo]: Dialog text: [cccccc]Пункт [cccccc]Значение
[73B461]-[ffffff] Электрокомпания [cccccc]буль №2
[73B461]-[ffffff] Клиент компании [cccccc]19 дней
[73B461]-[ffffff] стоимость 1-го кВт.ч [73B461]$2728
[73B461]-[ffffff] Баланс на оплату энергии [73B461]$17298910
[666666]Остальное:
[73B461]-[ffffff] Информация
[73B461]-[ffffff] Управление счётом за электроэнергии
[DialogInfo]: Dialog Style: 5
[DialogInfo]: Dialog Button1: Далее
[DialogInfo]: Dialog Button2: Закрыть
 
Решение
Может у кого-то будет подобная проблема, вот функция которая у меня заработала:

Lua:
local targetDialogId = 27009

function sampev.onShowDialog(dialogId, style, title, button1, button2, text)
    -- Проверяем, если текущий диалог совпадает с целевым ID
    if dialogId == targetDialogId then
        -- Убираем нахуй текст с диалога, оставляем цифры
        local text_utf8 = u8:decode(text)

        -- Ищем баланс в тексте диалога
        local balances = {}
        for number in text_utf8:gmatch("%$%d+") do
            table.insert(balances, number:match("%d+"))
        end

        if #balances > 1 then
            local balance = tonumber(balances[2])
        
            if balance then lastbalance = balance end
        end
    end
end

chromiusj

Известный
Модератор
5,656
3,959
Потому что там должны быть фигурные скобки, скрипт преобразовал их в квадратные, чтобы они в консоли не перекрасились в цветной
Lua:
{.-}%-{.-} Баланс на оплату энергии {.-}%$(%d+)
 

JHennessy

Известный
Автор темы
13
5
Потому что там должны быть фигурные скобки, скрипт преобразовал их в квадратные, чтобы они в консоли не перекрасились в цветной
Lua:
{.-}%-{.-} Баланс на оплату энергии {.-}%$(%d+)
Понял, спасибо. Но у меня ещё проблема в том, что при открытии нужного диалога должен выводиться текст откладки
if dialogId == targetDialogId then
-- Печатаем текст диалога для отладки
sampAddChatMessage("Текст диалога: " .. dialogText, -1)
Но поскольку он не выводится, значит скрипт даже не считывает открытие диалога
 

Heav

Активный
185
70
Понял, спасибо. Но у меня ещё проблема в том, что при открытии нужного диалога должен выводиться текст откладки
if dialogId == targetDialogId then
-- Печатаем текст диалога для отладки
sampAddChatMessage("Текст диалога: " .. dialogText, -1)
Но поскольку он не выводится, значит скрипт даже не считывает открытие диалога
Потому что в функции sampev.onShowDialog была ошибка
Lua:
function sampev.onShowDialog(id, style, title, button1, button2, text)
    -- Проверяем, если текущий диалог совпадает с целевым ID
    if dialogId == targetDialogId then
        -- Печатаем текст диалога для отладки
        sampAddChatMessage("Текст диалога: " .. text, -1)

        -- Ищем баланс в тексте диалога
        local balance = text:match(u8"Баланс на оплату энергии%s-[73B461]$([%d]+)")
        if balance then
            balance = tonumber(balance)
            if balance then
                -- Отправляем сообщение в чат с найденным балансом
                sampAddChatMessage("Найден баланс: " .. balance, -1)
            else
                sampAddChatMessage("Не удалось конвертировать баланс в число", -1)
            end
        else
            sampAddChatMessage("Не удалось найти баланс в тексте", -1)
        end
    end
end
 
  • Нравится
Реакции: JHennessy

xColorized

Известный
1,108
477
Понял, спасибо. Но у меня ещё проблема в том, что при открытии нужного диалога должен выводиться текст откладки
if dialogId == targetDialogId then
-- Печатаем текст диалога для отладки
sampAddChatMessage("Текст диалога: " .. dialogText, -1)
Но поскольку он не выводится, значит скрипт даже не считывает открытие диалога
onShowDialog вместо onDialog
 

JHennessy

Известный
Автор темы
13
5
Потому что в функции sampev.onShowDialog была ошибка
Lua:
function sampev.onShowDialog(id, style, title, button1, button2, text)
    -- Проверяем, если текущий диалог совпадает с целевым ID
    if dialogId == targetDialogId then
        -- Печатаем текст диалога для отладки
        sampAddChatMessage("Текст диалога: " .. text, -1)

        -- Ищем баланс в тексте диалога
        local balance = text:match(u8"Баланс на оплату энергии%s-[73B461]$([%d]+)")
        if balance then
            balance = tonumber(balance)
            if balance then
                -- Отправляем сообщение в чат с найденным балансом
                sampAddChatMessage("Найден баланс: " .. balance, -1)
            else
                sampAddChatMessage("Не удалось конвертировать баланс в число", -1)
            end
        else
            sampAddChatMessage("Не удалось найти баланс в тексте", -1)
        end
    end
end

Потому что в функции sampev.onShowDialog была ошибка
Lua:
function sampev.onShowDialog(id, style, title, button1, button2, text)
    -- Проверяем, если текущий диалог совпадает с целевым ID
    if dialogId == targetDialogId then
        -- Печатаем текст диалога для отладки
        sampAddChatMessage("Текст диалога: " .. text, -1)

        -- Ищем баланс в тексте диалога
        local balance = text:match(u8"Баланс на оплату энергии%s-[73B461]$([%d]+)")
        if balance then
            balance = tonumber(balance)
            if balance then
                -- Отправляем сообщение в чат с найденным балансом
                sampAddChatMessage("Найден баланс: " .. balance, -1)
            else
                sampAddChatMessage("Не удалось конвертировать баланс в число", -1)
            end
        else
            sampAddChatMessage("Не удалось найти баланс в тексте", -1)
        end
    end
end
uYVU8Cy.png

Почему-то всё равно не может найти, но теперь хотя бы диалог распознаёт
 

JHennessy

Известный
Автор темы
13
5
Может у кого-то будет подобная проблема, вот функция которая у меня заработала:

Lua:
local targetDialogId = 27009

function sampev.onShowDialog(dialogId, style, title, button1, button2, text)
    -- Проверяем, если текущий диалог совпадает с целевым ID
    if dialogId == targetDialogId then
        -- Убираем нахуй текст с диалога, оставляем цифры
        local text_utf8 = u8:decode(text)

        -- Ищем баланс в тексте диалога
        local balances = {}
        for number in text_utf8:gmatch("%$%d+") do
            table.insert(balances, number:match("%d+"))
        end

        if #balances > 1 then
            local balance = tonumber(balances[2])
        
            if balance then lastbalance = balance end
        end
    end
end