Как брать инфу с диалога

KOHTOP

Участник
Автор темы
138
17
Версия MoonLoader
.027.0-preview
Когда-то кто-то мне сказал, что инфу с диалога можно брать с find:match, а как я хз, подскажите please
 
Решение
Lua:
local sampev = require 'lib.samp.events'
function sampev.onShowDialog(id, style, title, button1, button2, text)
    for line in text:gsub('{......}',''):gmatch('([^\n\r]+)') do
        if line:find('Предупреждения%: %[%d+%]') then
            local count = line:match('Предупреждения%: %[(%d+)%]')
            sampAddChatMessage(count,-1)
        end
    end
end

Lance_Sterling

Известный
801
282
А как брать то :D
Lua:
require('lib.samp.events').onShowDialog = function(dialogId, style, title, button1, button2, text)
    if dialogId == 228 then -- \\ Предположим айди 228
        -- \\ Предположим текст "Привет, Nick_Name[252]"
        local nick, id = text:match('Привет%, (.+)%[(%d+)%]')
        sampAddChatMessage(nick..' '..id, -1)
    end
end
 

KOHTOP

Участник
Автор темы
138
17
Lua:
require('lib.samp.events').onShowDialog = function(dialogId, style, title, button1, button2, text)
    if dialogId == 228 then -- \\ Предположим айди 228
        -- \\ Предположим текст "Привет, Nick_Name[252]"
        local nick, id = text:match('Привет%, (.+)%[(%d+)%]')
        sampAddChatMessage(nick..' '..id, -1)
    end
end
А если samp.events уже подключен, то всё равно код вставлять?
 

Lance_Sterling

Известный
801
282
А если samp.events уже подключен, то всё равно код вставлять?
Ну тогда пишешь переменную, в какую подключен samp events и так же хукаешь
Lua:
function samp.onShowDialog(dialogId, style, title, button1, button2, text)-- \\ у меня переменная samp, у тебя может быть другое - например sampev
    if dialogId == 228 then -- \\ Предположим айди 228
        -- \\ Предположим текст "Привет, Nick_Name[252]"
        local nick, id = text:match('Привет%, (.+)%[(%d+)%]')
        sampAddChatMessage(nick..' '..id, -1)
    end
end
 

KOHTOP

Участник
Автор темы
138
17
Ну тогда пишешь переменную, в какую подключен samp events и так же хукаешь
Lua:
function samp.onShowDialog(dialogId, style, title, button1, button2, text)-- \\ у меня переменная samp, у тебя может быть другое - например sampev
    if dialogId == 228 then -- \\ Предположим айди 228
        -- \\ Предположим текст "Привет, Nick_Name[252]"
        local nick, id = text:match('Привет%, (.+)%[(%d+)%]')
        sampAddChatMessage(nick..' '..id, -1)
    end
end
1683721735001.png

Мне нужно получить эту переменную, но если я пишу local warning = text:match('Предупреждения%: (.+)%[(%d+)%]') , то переменная не сохраняется и не выводится
 

владикс

Потрачен
537
182
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
А если samp.events уже подключен, то всё равно код вставлять?
 

KOHTOP

Участник
Автор темы
138
17
moonloader:
[22:39:30.279440] (error)    Admin Tools: D:\blackred\moonloader\script.lua:978: attempt to index global 'text' (a nil value)
stack traceback:
    D:\blackred\moonloader\script.lua:978: in function 'callback'
    D:\blackred\moonloader\lib\samp\events\core.lua:79: in function <D:\blackred\moonloader\lib\samp\events\core.lua:53>
[22:39:30.291441] (error)    Admin Tools: Script died due to an error. (07C144A4)
1683722444370.png

Script:
function sampev.onShowDialog(dialogId, dialogStyle, dialogTitle, okButtonText, cancelButtonText, dialogText)
    if dialogId == 2 then
          sampSendDialogResponse(dialogId,1,0,u8(settings.config.password))
          thread:run()
          return false

    end
    if dialogId == 211 then
        sampSendDialogResponse(dialogId,1,2,u8(settings.config.admpass))
        return true
    end
    if dialogId == 0 then
        sampSendDialogResponse(dialogId,1)
        return true
    end
    if dialogId == 235 then
        
        local warning = text:match('Предупреждений: [(%d+)%]')
        sampAddChatMessage(warning..'/3', -1)
        return false
    end
end
 

accord-

Потрачен
437
79
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
moonloader:
[22:39:30.279440] (error)    Admin Tools: D:\blackred\moonloader\script.lua:978: attempt to index global 'text' (a nil value)
stack traceback:
    D:\blackred\moonloader\script.lua:978: in function 'callback'
    D:\blackred\moonloader\lib\samp\events\core.lua:79: in function <D:\blackred\moonloader\lib\samp\events\core.lua:53>
[22:39:30.291441] (error)    Admin Tools: Script died due to an error. (07C144A4)
Посмотреть вложение 201028
Script:
function sampev.onShowDialog(dialogId, dialogStyle, dialogTitle, okButtonText, cancelButtonText, dialogText)
    if dialogId == 2 then
          sampSendDialogResponse(dialogId,1,0,u8(settings.config.password))
          thread:run()
          return false

    end
    if dialogId == 211 then
        sampSendDialogResponse(dialogId,1,2,u8(settings.config.admpass))
        return true
    end
    if dialogId == 0 then
        sampSendDialogResponse(dialogId,1)
        return true
    end
    if dialogId == 235 then
      
        local warning = text:match('Предупреждений: [(%d+)%]')
        sampAddChatMessage(warning..'/3', -1)
        return false
    end
end
text:match замени на dialogText:match
 

MLycoris

Режим чтения
Проверенный
1,822
1,869
Lua:
local sampev = require 'lib.samp.events'
function sampev.onShowDialog(id, style, title, button1, button2, text)
    for line in text:gsub('{......}',''):gmatch('([^\n\r]+)') do
        if line:find('Предупреждения%: %[%d+%]') then
            local count = line:match('Предупреждения%: %[(%d+)%]')
            sampAddChatMessage(count,-1)
        end
    end
end
 

KOHTOP

Участник
Автор темы
138
17
Lua:
local sampev = require 'lib.samp.events'
function sampev.onShowDialog(id, style, title, button1, button2, text)
    for line in text:gsub('{......}',''):gmatch('([^\n\r]+)') do
        if line:find('Предупреждения%: %[%d+%]') then
            local count = line:match('Предупреждения%: %[(%d+)%]')
            sampAddChatMessage(count,-1)
        end
    end
end
А можно как-то, чтобы при вводе команды /re сразу бралась переменная с диалога?
 

MLycoris

Режим чтения
Проверенный
1,822
1,869
А можно как-то, чтобы при вводе команды /re сразу бралась переменная с диалога?
команду на 6 строке вставь команду, которая смотрит стату другого
Lua:
local sampev = require 'lib.samp.events'
local check = false
function sampev.onSendCommand(cmd)
    if cmd:find('re %d+') then
        local current_id = cmd:match('re (%d+)')
        sampSendChat('/getstat '..current_id)
        check = true
    end
end
function sampev.onShowDialog(id, style, title, button1, button2, text)
    if check then
        for line in text:gsub('{......}',''):gmatch('([^\n\r]+)') do
            if line:find('Предупреждения%: %[%d+%]') then
                local count = line:match('Предупреждения%: %[(%d+)%]')
                sampAddChatMessage(count,-1)
                sampCloseCurrentDialogWithButton(0)
                check = false
            end
        end
    end
end
 

KOHTOP

Участник
Автор темы
138
17
команду на 6 строке вставь команду, которая смотрит стату другого
Lua:
local sampev = require 'lib.samp.events'
local check = false
function sampev.onSendCommand(cmd)
    if cmd:find('re %d+') then
        local current_id = cmd:match('re (%d+)')
        sampSendChat('/getstat '..current_id)
        check = true
    end
end
function sampev.onShowDialog(id, style, title, button1, button2, text)
    if check then
        for line in text:gsub('{......}',''):gmatch('([^\n\r]+)') do
            if line:find('Предупреждения%: %[%d+%]') then
                local count = line:match('Предупреждения%: %[(%d+)%]')
                sampAddChatMessage(count,-1)
                sampCloseCurrentDialogWithButton(0)
                check = false
            end
        end
    end
end
Можно как-то кд сделать тут, если у меня thread_function уже занято?

команду на 6 строке вставь команду, которая смотрит стату другого
Lua:
local sampev = require 'lib.samp.events'
local check = false
function sampev.onSendCommand(cmd)
    if cmd:find('re %d+') then
        local current_id = cmd:match('re (%d+)')
        sampSendChat('/getstat '..current_id)
        check = true
    end
end
function sampev.onShowDialog(id, style, title, button1, button2, text)
    if check then
        for line in text:gsub('{......}',''):gmatch('([^\n\r]+)') do
            if line:find('Предупреждения%: %[%d+%]') then
                local count = line:match('Предупреждения%: %[(%d+)%]')
                sampAddChatMessage(count,-1)
                sampCloseCurrentDialogWithButton(0)
                check = false
            end
        end
    end
end
Если сделать отдельно
Script:
    if check then
        for line in text:gsub('{......}',''):gmatch('([^\n\r]+)') do
            if line:find('Предупреждения%: %[%d+%]') then
                local warning = line:match('Предупреждения%: %[(%d+)%]')
                sampCloseCurrentDialogWithButton(0)
                check = false
            end
        end
    end
То тогда не работает
Script:
function sampev.onShowDialog(dialogId, dialogStyle, dialogTitle, okButtonText, cancelButtonText, dialogText)
    if dialogId == 2 then
          sampSendDialogResponse(dialogId,1,0,u8(settings.config.password))
          thread:run()
          return true

    end
    if dialogId == 211 then
        sampSendDialogResponse(dialogId,1,2,u8(settings.config.admpass))
        return true
    end
    if dialogId == 0 then
        sampSendDialogResponse(dialogId,1)
        return true
    end
end

Ну а если сделать всё вместе, то тогда скрипт крашится
moonloader:
[23:15:15.718382] (error)    Admin Tools: D:\blackred\moonloader\script.lua:975: attempt to index global 'text' (a nil value)
stack traceback:
    D:\blackred\moonloader\script.lua:975: in function 'callback'
    D:\blackred\moonloader\lib\samp\events\core.lua:79: in function <D:\blackred\moonloader\lib\samp\events\core.lua:53>
[23:15:15.744384] (error)    Admin Tools: Script died due to an error. (1845CB84)
 

MLycoris

Режим чтения
Проверенный
1,822
1,869
Можно как-то кд сделать тут, если у меня thread_function уже занято?
Lua:
local sampev = require 'lib.samp.events'
local check = false
function sampev.onSendCommand(cmd)
    if cmd:find('re %d+') then
        lua_thread.create(function()
            local current_id = cmd:match('re (%d+)')
            wait(1000)
            sampSendChat('/getstat '..current_id)
            check = true
        end)
    end
end
function sampev.onShowDialog(id, style, title, button1, button2, text)
    if check then
        for line in text:gsub('{......}',''):gmatch('([^\n\r]+)') do
            if line:find('Предупреждения%: %[%d+%]') then
                local count = line:match('Предупреждения%: %[(%d+)%]')
                sampAddChatMessage(count,-1)
                sampCloseCurrentDialogWithButton(0)
                check = false
            end
        end
    end
end
 
  • Нравится
Реакции: YarikVL