Как получить переменную с чата и диалога

KOHTOP

Участник
Автор темы
138
17
Версия MoonLoader
.027.0-preview
Вторая тема, в прошлой никто не ответил :D

Я делаю свой личный тулс, чтобы было удобно играть :D
Я хотел бы сделать авто вход в аккаунт (чтобы пароль сам вводился), но хз как в диалоговое окно ввести переменую
И как получить переменную с чата, к примеру "Nick[id]: Сижу на посту, курю сигару и т.д" и мне нужно получить именно ник и ид, дабы он записался в TextInput (который большой)

И как получить переменную с диалога (к примеру /stats, там уровень, ник, деньги и т.д)
 

KOHTOP

Участник
Автор темы
138
17
Хук onServerMessage и onShowDialog, получить инфу с помощью text:match, искать text:find, используй регулярные выражения
Script:
    function sampev.onServerMessage(color, text)
        text:find('Администратор Sam_Mason[345] заблокировал игрока Kontop[-1] по причине:')
    end

И как мне получить значение, которое идет дальше "по причине"?

Хук onServerMessage и onShowDialog, получить инфу с помощью text:match, искать text:find, используй регулярные выражения
И как использовать onShowDialog, если он показывает диалог

И ещё как вывести аргумент с команды (к примеру /vr text) и мне надо, чтобы вместо текста в imgui показался аргумент
 

Lance_Sterling

Известный
995
355
И как мне получить значение, которое идет дальше "по причине"?
Lua:
function sampev.onServerMessage(color, text)
    if text:find('Администратор Sam_Mason%[%d+%] заблокировал игрока Kontop%[%d+%] по причине: .+') then
        local reason = text:match('Администратор Sam_Mason%[%d+%] заблокировал игрока Kontop%[%d+%] по причине: (.+)')
        sampAddChatMessage(reason, -1)
    end
end
(писал с тф могут быть ошибки)

И как использовать onShowDialog, если он показывает диалог
Нет, показывает диалог функция showDialog (опять же если не ошибаюсь, не помню когда последний раз это юзал)

Используй функцию: sampev.onShowDialog(dialogId, style, title, button1, button2, text)

Ловить его и получать информацию точно так же как и в onServerMessage.

И ещё как вывести аргумент с команды (к примеру /vr text) и мне надо, чтобы вместо текста в imgui показался аргумент
За это отвечает хук sampev.onSendCommand(command)

Пример будет без имгуи окна, но думаю проблем текст вывести из переменной в имгуи окно у тебя не возникнет:
Lua:
local text = '' -- \\ выводить переменную в имгуи окно
function sampev.onSendCommand(command)
    if command:find('/vr .+') then
        text = command:match('/vr (.+)')
    end
end

-- ...

Так же вот урок по регулярным выражениям: https://www.blast.hk/threads/62661/
 
Последнее редактирование:

KOHTOP

Участник
Автор темы
138
17
Lua:
function sampev.onServerMessage(color, text)
    if text:find('Администратор Sam_Mason%[%d+%] заблокировал игрока Kontop%[%d+%] по причине: .+') then
        local reason = text:match('Администратор Sam_Mason%[%d+%] заблокировал игрока Kontop%[%d+%] по причине: (.+)')
        sampAddChatMessage(reason, -1)
    end
end
(писал с тф могут быть ошибки)


Нет, показывает диалог функция showDialog (опять же если не ошибаюсь, не помню когда последний раз это юзал)

Используй функцию: sampev.onShowDialog(dialogId, style, title, button1, button2, text)

Ловить его и получать информацию точно так же как и в onServerMessage.


За это отвечает хук sampev.onSendCommand(command)

Пример будет без имгуи окна, но думаю проблем текст вывести из переменной в имгуи окно у тебя не возникнет:
Lua:
local text = '' -- \\ выводить переменную в имгуи окно
function sampev.onSendCommand(command)
    if command:find('/vr .+') then
        text = command:match('/vr (.+)')
    end
end

-- ...

Так же вот урок по регулярным выражениям: https://www.blast.hk/threads/62661/
Там command:find нету, и при попытке запуска imgui выдаёт ошибку

Lua:
[00:12:13.767393] (error)    script.lua: D:\blackred\moonloader\script.lua:101: attempt to index global 'command' (a nil value)
stack traceback:
    D:\blackred\moonloader\script.lua:101: in function 'callback'
    D:\blackred\moonloader\lib\samp\events\core.lua:79: in function <D:\blackred\moonloader\lib\samp\events\core.lua:53>
[00:12:13.768393] (error)    script.lua: Script died due to an error. (07D5F38C)

Script:
    function samp.onServerMessage(color, text)
        if command:find('/re .+') then
            recons = command:match('/re (.+)')
        end
    end
 

Lance_Sterling

Известный
995
355
Там command:find нету, и при попытке запуска imgui выдаёт ошибку

Lua:
[00:12:13.767393] (error)    script.lua: D:\blackred\moonloader\script.lua:101: attempt to index global 'command' (a nil value)
stack traceback:
    D:\blackred\moonloader\script.lua:101: in function 'callback'
    D:\blackred\moonloader\lib\samp\events\core.lua:79: in function <D:\blackred\moonloader\lib\samp\events\core.lua:53>
[00:12:13.768393] (error)    script.lua: Script died due to an error. (07D5F38C)

Script:
    function samp.onServerMessage(color, text)
        if command:find('/re .+') then
            recons = command:match('/re (.+)')
        end
    end
Это потому что ты запихнул это в хук onServerMessage, делай на моем примере выше
Lua:
local reconId = -1 -- \\ переменная которая отвечает за айди игрока за которым мы в реконе
function sampev.onSendCommand(command)
    if command:find('/re %d+') then
        reconId = command:match('/re (%d+)') -- \\ %d+ отвечает за любое число одним символом, и больше
        reconId = tonumber(reconId)
    end
end

-- ...
 

KOHTOP

Участник
Автор темы
138
17
Это потому что ты запихнул это в хук onServerMessage, делай на моем примере выше
Lua:
local reconId = -1 -- \\ переменная которая отвечает за айди игрока за которым мы в реконе
function sampev.onSendCommand(command)
    if command:find('/re %d+') then
        reconId = command:match('/re (%d+)') -- \\ %d+ отвечает за любое число одним символом, и больше
        reconId = tonumber(reconId)
    end
end

-- ...
Script:
[00:39:55.392338] (error)    script.lua: D:\blackred\moonloader\script.lua:116: attempt to index global 'sampev' (a nil value)
stack traceback:
    D:\blackred\moonloader\script.lua: in function <D:\blackred\moonloader\script.lua:110>
[00:39:55.392338] (error)    script.lua: Script died due to an error. (01A2F99C)

1682001721168.png

Хотя я добавил samp.events
 

Lance_Sterling

Известный
995
355
Script:
[00:39:55.392338] (error)    script.lua: D:\blackred\moonloader\script.lua:116: attempt to index global 'sampev' (a nil value)
stack traceback:
    D:\blackred\moonloader\script.lua: in function <D:\blackred\moonloader\script.lua:110>
[00:39:55.392338] (error)    script.lua: Script died due to an error. (01A2F99C)

Посмотреть вложение 198446
Хотя я добавил samp.events
ну нажми CTRL + H, там замени все sampev. на samp.