[LUA SAMP] Как достать цифру из диалога?

GasikPasik

Участник
Автор темы
50
4
Версия MoonLoader
.027.0-preview
[LUA SAMP] Как достать цифру из диалога?
Мне нужно достать информацию и о балансе в разных счетах.
Перепробовал очень много чего, но всё как об стенку. Может я тупой, а может мало инфы.
Не сложно вытащить AZ COINS или Деньги:[$....], а вот дальше.. Как достать последующие вариант я не знаю. Просьба помочь и если можно подробнее объяснить. Заранее, просто нереально спасибо :D

(( Вот достал из кода функцию, которая делает это ))
Lua:
function sampev.onShowDialog(dialogId, style, title, button1, button2, text)
    sampAddChatMessage(dialogId, -1)
    if dialogId == 235 then
        print(text)
        mats = string.match(text, "[банке:]+%s+$(%d+)")
        sampAddChatMessage(mats, -1)

    end
end

1604693458376.png
1604693467054.png
 
Последнее редактирование:
  • Влюблен
Реакции: bet.io
Решение
Спасибо и за это.
Я дописал пару команд(вывода переменных) и в случае не совпадение мне выводило в чат № else.
Как итог не одного совпадение не нашлось и в чат мне зафлудило 25 раз "else"(ровно столько же, сколько строк в самом диалоге),
Я начинаю думать, что тут каким-нибудь каверзным путём написан диалог и скрипт не воспринимает "Деньги в банке: [$34234]", как одну строчку.

Хотя большая вероятность, что в ниже приведённом скрипте есть ошибки. Но всё ровно, спасибо, что отписались
(в консоли ошибок не было)

Код:
function sampev.onShowDialog(dialogId,s,t,b1,b2,text)
    local value = 0
    for line in text:gmatch("[^\n]+") do -- разбиваем чтобы искать по строкам
        if line:find('Деньги в банке: %[$(%d+)%]') then -- Пример...

Jendosik

Участник
211
12
[LUA SAMP] Как достать цифру из диалога?
Мне нужно достать информацию и о балансе в разных счетах.
Перепробовал очень много чего, но всё как об стенку. Может я тупой, а может мало инфы.
Не сложно вытащить AZ COINS или Деньги:[$....], а вот дальше.. Как достать последующие вариант я не знаю. Просьба помочь и если можно подробнее объяснить. Заранее, просто нереально спасибо :D

(( Вот достал из кода функцию, которая делает это ))
Lua:
function sampev.onShowDialog(dialogId, style, title, button1, button2, text)
    sampAddChatMessage(dialogId, -1)
    if dialogId == 235 then
        print(text)
        mats = string.match(text, "[банке:]+%s+$(%d+)")
        sampAddChatMessage(mats, -1)

    end
end

Посмотреть вложение 74673 Посмотреть вложение 74674
Lua:
function sampev.onShowDialog(dialogId, style, title, button1, button2, text)
    sampAddChatMessage(dialogId, color)
    if dialogId == Твой ид then
        local dialogtext = sampGetDialogText() --получаем текст с диалога
        local f = dialogtext:match("Тут регулярки")
        sampAddChatMessage(f, -1) end
end
Вроде так
 
  • Нравится
Реакции: markiz.desead

kizn

О КУ)))
Всефорумный модератор
2,404
2,054
Lua:
function sampev.onShowDialog(dialogId, style, title, button1, button2, text)
    sampAddChatMessage(dialogId, color)
    if dialogId == Твой ид then
        local dialogtext = sampGetDialogText() --получаем текст с диалога
        local f = dialogtext:match("Тут регулярки")
        sampAddChatMessage(f, -1) end
end
Вроде так
Зачем переменная dialogtext если текст уже хранится в переменной text?
 
  • Bug
Реакции: Batya2020

kizn

О КУ)))
Всефорумный модератор
2,404
2,054
  • Нравится
  • Bug
Реакции: Vintik и Batya2020

koncumone

Известный
337
87
[LUA SAMP] Как достать цифру из диалога?
Мне нужно достать информацию и о балансе в разных счетах.
Перепробовал очень много чего, но всё как об стенку. Может я тупой, а может мало инфы.
Не сложно вытащить AZ COINS или Деньги:[$....], а вот дальше.. Как достать последующие вариант я не знаю. Просьба помочь и если можно подробнее объяснить. Заранее, просто нереально спасибо :D

(( Вот достал из кода функцию, которая делает это ))
Lua:
function sampev.onShowDialog(dialogId, style, title, button1, button2, text)
    sampAddChatMessage(dialogId, -1)
    if dialogId == 235 then
        print(text)
        mats = string.match(text, "[банке:]+%s+$(%d+)")
        sampAddChatMessage(mats, -1)

    end
end

Посмотреть вложение 74673 Посмотреть вложение 74674
Lua:
local statistic = {
    azcoins  = 'Текущее состояние счета:%s+(%d+)%s+az',
    money    = 'Деньги в банке:%s+%[%$(%d+)%]',
    deposite = 'Деньги на депозите:%s+%[%$(%d+)%]'
}

function sampev.onShowDialog(dialogId, style, title, button1, button2, text)
    if title == 'Основная статистика' then

        local stat_array = {};

        for k, v in pairs(statistic) do
            stat_array[k] = text:match(v);
        end;
        
        sampAddChatMessage('az = ' .. stat_array.azcoins, -1)
        sampAddChatMessage('money = ' .. stat_array.money, -1)
        sampAddChatMessage('deposite = ' .. stat_array.deposite, -1)
        
    end
end
 
  • Нравится
  • Bug
Реакции: neverlane и Batya2020

GasikPasik

Участник
Автор темы
50
4
Lua:
function sampev.onShowDialog(dialogId, style, title, button1, button2, text)
    sampAddChatMessage(dialogId, color)
    if dialogId == Твой ид then
        local dialogtext = sampGetDialogText() --получаем текст с диалога
        local f = dialogtext:match("Тут регулярки")
        sampAddChatMessage(f, -1) end
end
Вроде так

Да.. спасибо конечно, но данный код у меня уже есть. Я как раз и не понимаю, какие сюда регулярки, не робит, чтобы я не ставил.

Lua:
local statistic = {
    azcoins  = 'Текущее состояние счета:%s+(%d+)%s+az',
    money    = 'Деньги в банке:%s+%[%$(%d+)%]',
    deposite = 'Деньги на депозите:%s+%[%$(%d+)%]'
}

function sampev.onShowDialog(dialogId, style, title, button1, button2, text)
    if title == 'Основная статистика' then

        local stat_array = {};

        for k, v in pairs(statistic) do
            stat_array[k] = text:match(v);
        end;
       
        sampAddChatMessage('az = ' .. stat_array.azcoins, -1)
        sampAddChatMessage('money = ' .. stat_array.money, -1)
        sampAddChatMessage('deposite = ' .. stat_array.deposite, -1)
       
    end
end
Спасибо большое, но и этот код тоже не работает, щас буду пытаться что-то сделать, спасибо большое. ( Выводит только AZ коийны + по титлу стату не определяет, поэтому заменил на айди диалога)

Спасибо большое, но и этот код тоже не работает, щас буду пытаться что-то сделать, спасибо большое. ( Выводит только AZ коийны + по титлу стату не определяет, поэтому заменил на айди диалога)
[ML] (error) [GABELA]: D:\GTA sa — êîïèÿ\moonloader\Gabela.lua:237: attempt to concatenate field 'money' (a nil value)
stack traceback:
D:\GTA sa — êîïèÿ\moonloader\Gabela.lua:237: in function 'callback'
D:\GTA sa — êîïèÿ\moonloader\lib\samp\events\core.lua:79: in function <D:\GTA sa — êîïèÿ\moonloader\lib\samp\events\core.lua:53>
[ML] (error) [GABELA]: Script died due to an error. (196AAC3C)

Также попробовал изменить порядок выод ДЕПОЗИТА и ДЕНЕГ, дабы узнать проблема только с money или нет.

[ML] (error) [GABELA]: D:\GTA sa — êîïèÿ\moonloader\Gabela.lua:237: attempt to concatenate field 'deposite' (a nil value)
stack traceback:
D:\GTA sa — êîïèÿ\moonloader\Gabela.lua:237: in function 'callback'
D:\GTA sa — êîïèÿ\moonloader\lib\samp\events\core.lua:79: in function <D:\GTA sa — êîïèÿ\moonloader\lib\samp\events\core.lua:53>
[ML] (error) [GABELA]: Script died due to an error. (01E2E2C4)

Я думаю, что там не int, а string.
Кто сталкивался с подобной проблемой в логах, пожалуйста выручайте
 

koncumone

Известный
337
87
Да.. спасибо конечно, но данный код у меня уже есть. Я как раз и не понимаю, какие сюда регулярки, не робит, чтобы я не ставил.


Спасибо большое, но и этот код тоже не работает, щас буду пытаться что-то сделать, спасибо большое. ( Выводит только AZ коийны + по титлу стату не определяет, поэтому заменил на айди диалога)


[ML] (error) [GABELA]: D:\GTA sa — êîïèÿ\moonloader\Gabela.lua:237: attempt to concatenate field 'money' (a nil value)
stack traceback:
D:\GTA sa — êîïèÿ\moonloader\Gabela.lua:237: in function 'callback'
D:\GTA sa — êîïèÿ\moonloader\lib\samp\events\core.lua:79: in function <D:\GTA sa — êîïèÿ\moonloader\lib\samp\events\core.lua:53>
[ML] (error) [GABELA]: Script died due to an error. (196AAC3C)

Также попробовал изменить порядок выод ДЕПОЗИТА и ДЕНЕГ, дабы узнать проблема только с money или нет.

[ML] (error) [GABELA]: D:\GTA sa — êîïèÿ\moonloader\Gabela.lua:237: attempt to concatenate field 'deposite' (a nil value)
stack traceback:
D:\GTA sa — êîïèÿ\moonloader\Gabela.lua:237: in function 'callback'
D:\GTA sa — êîïèÿ\moonloader\lib\samp\events\core.lua:79: in function <D:\GTA sa — êîïèÿ\moonloader\lib\samp\events\core.lua:53>
[ML] (error) [GABELA]: Script died due to an error. (01E2E2C4)

Я думаю, что там не int, а string.
Кто сталкивался с подобной проблемой в логах, пожалуйста выручайте
у меня работает, хз. Проблема не в коде 100%
 
  • Нравится
Реакции: GasikPasik

Fott

Простреленный
3,410
2,223
Команда помощников собралась.
Lua:
function ev.onShowDialog(dialogId,s,t,b1,b2,text)
    for line in text:gmatch("[^\n]+") do -- разбиваем чтобы искать по строкам
        if line:find('Деньги в банке: %[$(%d+)%]') then -- Пример строки Деньги в банке: [$21]
            money = line:match('Деньги: %[$(%d+)%]') -- запишет в переменную money цифру 21
        end
     end
end
 
Последнее редактирование:

ufdhbi

Известный
Проверенный
1,455
860
Команда помощников собралась.
Lua:
function ev.onShowDialog(dialogId,s,t,b1,b2,text)
    for line in text:gmatch("[^\n]+") do -- разбиваем чтобы искать по строкам
        if line:find('Деньги в банке: %[$(%d+)%]') then -- Пример строки Деньги в банке: [$21]
            money = line:match('Уровень: %[$(%d+)%]') -- запишет в переменную money цифру 21
        end
     end
end
Еще один помощник, уровень замени на деньги))