АВТО РЕПОРТ / ЖАЛОБА/ВОПРОС - ОТВЕТ. КАК НА АРИЗОНЕ. ПОМОГИ ПОЖАЛУЙСТА!

ManstikosUA

Участник
Автор темы
76
16
Версия MoonLoader
Другое
привет, помогите, пожалуйста!
Как сделать такой - же авто репорт? Как хукнуть и т.д. Расскажите поподробнее пожалуйста, если можно то кодом. Буду очень благодарен!
1000003508.png

(не сохранять, сохранить локально, сохранить в бд сервера не нужно)
 
Решение
как их узнать,? в этом и главная проблема
путь в moonloader / lib / samp / events.lua
пробиваешь: dialog

и нам выпало результаты:

1.
OUTCOMING_RPCS[RPC.DIALOGRESPONSE] = {'onSendDialogResponse', {dialogId = 'uint16'}, {button = 'uint8'}, {listboxId = 'uint16'}, {input = 'string8'}}
Нет, я имею ввиду чтобы меня вывело диалог в игре. А OUTCOMING_RPCS это вообще-то для отправки запроса

2. INCOMING_RPCS[RPC.SHOWDIALOG] = {'onShowDialog', {dialogId = 'uint16'}, {style = 'uint8'}, {title = 'string8'}, {button1 = 'string8'}, {button2 = 'string8'}, {text = 'encodedString4096'}}
Да, этот. Именно это, что нам нужно событие при вывода диалог в игре.

Просто нужно понять хотя бы базовые знание по англ. язык, далее.
{'onShowDialog'...

KyRDa

Участник
86
44
привет, помогите, пожалуйста!
Как сделать такой - же авто репорт? Как хукнуть и т.д. Расскажите поподробнее пожалуйста, если можно то кодом. Буду очень благодарен!
Посмотреть вложение 249336
(не сохранять, сохранить локально, сохранить в бд сервера не нужно)
Хук можно сделать через Samp events - function sampevents.OnServerMessage(color, text)
- эта функция вызывается на каждое сообщение в чате. Увидишь репорт - откроет меню.

Меню сам накидать можешь, если знаешь что делает каждая кнопка. Не знаю как отправить ответ, предположу, что на кнопку отправить отправляется текст в чат с командой ответа на репорт:
sampSendChat("/команда_ответа "..u8:decode(ffi.string(переменная_ответа)))
 

ManstikosUA

Участник
Автор темы
76
16
Хук можно сделать через Samp events - function sampevents.OnServerMessage(color, text)
- эта функция вызывается на каждое сообщение в чате. Увидишь репорт - откроет меню.

Меню сам накидать можешь, если знаешь что делает каждая кнопка. Не знаю как отправить ответ, предположу, что на кнопку отправить отправляется текст в чат с командой ответа на репорт:
sampSendChat("/команда_ответа "..u8:decode(ffi.string(переменная_ответа)))
у меня imgui
 
  • Эм
Реакции: KyRDa

ManstikosUA

Участник
Автор темы
76
16
хукаешь диалог репорта (samp events -> onShowDialog)
его скрываешь, вызываешь твое окно имгуи (заранее записав куда-то данные для окна)
дальше отправить/отклонить - sampSendDialogResponse
можно поподробней, как хукнуть окно? Щас найду в интернете любое и скину

как к примеру это чудо хукнуть
 

Вложения

  • IMG_20240816_201257.jpg
    IMG_20240816_201257.jpg
    24.9 KB · Просмотры: 23
Последнее редактирование:

kyrtion

Известный
907
321
можно поподробней, как хукнуть окно? Щас найду в интернете любое и скину

как к примеру это чудо хукнуть
Спокойно. Узнаешь детали в onShowDialog.
Если все правильно и совпадают то в таком случае использовать следующие алгоритмы:
- запомнить текущие данные диалога, в будущем оно тебе пригодится (полные инфа диалога, никнейм, ид, сообщение и когда взял и тд)
- открыть окно имгуи
- вернуть return false диалога
 

ManstikosUA

Участник
Автор темы
76
16
Спокойно. Узнаешь детали в onShowDialog.
Если все правильно и совпадают то в таком случае использовать следующие алгоритмы:
- запомнить текущие данные диалога, в будущем оно тебе пригодится (полные инфа диалога, никнейм, ид, сообщение и когда взял и тд)
- открыть окно имгуи
- вернуть return false диалога
как их узнать,? в этом и главная проблема
 

kyrtion

Известный
907
321
как их узнать,? в этом и главная проблема
путь в moonloader / lib / samp / events.lua
пробиваешь: dialog

и нам выпало результаты:

1.
OUTCOMING_RPCS[RPC.DIALOGRESPONSE] = {'onSendDialogResponse', {dialogId = 'uint16'}, {button = 'uint8'}, {listboxId = 'uint16'}, {input = 'string8'}}
Нет, я имею ввиду чтобы меня вывело диалог в игре. А OUTCOMING_RPCS это вообще-то для отправки запроса

2. INCOMING_RPCS[RPC.SHOWDIALOG] = {'onShowDialog', {dialogId = 'uint16'}, {style = 'uint8'}, {title = 'string8'}, {button1 = 'string8'}, {button2 = 'string8'}, {text = 'encodedString4096'}}
Да, этот. Именно это, что нам нужно событие при вывода диалог в игре.

Просто нужно понять хотя бы базовые знание по англ. язык, далее.
{'onShowDialog', {dialogId = 'uint16'}, {style = 'uint8'}, {title = 'string8'}, {button1 = 'string8'}, {button2 = 'string8'}, {text = 'encodedString4096'}}
в каждом запроса RPCS построены так: {1, 2}
1 - название событие
2 - аргументы, что возвращают как callback и его тип значений

Тогда и можем сделать так:
Lua:
function sampev.onShowDialog(dialogId, style, title, button1, button2, text)
  text = text
    :gsub('{%x%x%x%x%x%x}', '') -- убираем hex-цветные
    :gsub('^%s+', '')
    :gsub('%s+$', '')

  local fmt = string.format(
    '\nDIALOG >> ID[%s] STYLE[%s] TITLE[%s] B1[%s] B2[%s]\n%s\n\n',
    dialogId, style, title, button1, button2, text
  )
  print(fmt)
end


-- для вывода в каждой строчке в text onShowDialog:
for line in text:gmatch('[^\n]+') do
  -- line: Ваш игровой ник: Your_Name
  if line:find('^Ваш игровой ник: %S+$') then
    local nickname = line:match('^Ваш игровой ник: (%S+)$')
    -- nickname: Your_Name
    -- справка: %S+ - только символы без пробела
    -- дальнейшем можешь узнать:
    -- http://umodel.narod.ru/webhelp/ams/Program_Reference/Actions/RegExp_Lua.htm
  end
end
 

ManstikosUA

Участник
Автор темы
76
16
путь в moonloader / lib / samp / events.lua
пробиваешь: dialog

и нам выпало результаты:

1.
OUTCOMING_RPCS[RPC.DIALOGRESPONSE] = {'onSendDialogResponse', {dialogId = 'uint16'}, {button = 'uint8'}, {listboxId = 'uint16'}, {input = 'string8'}}
Нет, я имею ввиду чтобы меня вывело диалог в игре. А OUTCOMING_RPCS это вообще-то для отправки запроса

2. INCOMING_RPCS[RPC.SHOWDIALOG] = {'onShowDialog', {dialogId = 'uint16'}, {style = 'uint8'}, {title = 'string8'}, {button1 = 'string8'}, {button2 = 'string8'}, {text = 'encodedString4096'}}
Да, этот. Именно это, что нам нужно событие при вывода диалог в игре.

Просто нужно понять хотя бы базовые знание по англ. язык, далее.
{'onShowDialog', {dialogId = 'uint16'}, {style = 'uint8'}, {title = 'string8'}, {button1 = 'string8'}, {button2 = 'string8'}, {text = 'encodedString4096'}}
в каждом запроса RPCS построены так: {1, 2}
1 - название событие
2 - аргументы, что возвращают как callback и его тип значений

Тогда и можем сделать так:
Lua:
function sampev.onShowDialog(dialogId, style, title, button1, button2, text)
  text = text
    :gsub('{%x%x%x%x%x%x}', '') -- убираем hex-цветные
    :gsub('^%s+', '')
    :gsub('%s+$', '')

  local fmt = string.format(
    '\nDIALOG >> ID[%s] STYLE[%s] TITLE[%s] B1[%s] B2[%s]\n%s\n\n',
    dialogId, style, title, button1, button2, text
  )
  print(fmt)
end


-- для вывода в каждой строчке в text onShowDialog:
for line in text:gmatch('[^\n]+') do
  -- line: Ваш игровой ник: Your_Name
  if line:find('^Ваш игровой ник: %S+$') then
    local nickname = line:match('^Ваш игровой ник: (%S+)$')
    -- nickname: Your_Name
    -- справка: %S+ - только символы без пробела
    -- дальнейшем можешь узнать:
    -- http://umodel.narod.ru/webhelp/ams/Program_Reference/Actions/RegExp_Lua.htm
  end
end
если честно, я почти ничего не понял. Но все равно спасибо, не хочу быть сильно навязчивым, отмечу как правильный ответ, мб в Ютубе более подробный урок найду)

Мне лучше разбирать скрипт , или отрезок с уже готовым, я так легче понимаю, чем все вот это вот)
 
Последнее редактирование:
  • Нравится
Реакции: kyrtion