Отлавливать не серверное сообщение / Lua

optimal user

Известный
Автор темы
107
6
Есть какой-то вариант, как можно ловить сообщения, которые отправляются другими скриптами?
 

AdCKuY_DpO4uLa

Адский дрочер
Друг
334
731
спасибо за ахуительную идею) сейчас тебе пачку sf файлов закину
а по теме - спасибо за хук выше


мне нужно условно отловить скриптовое сообщение которое содержит текст "TEST TEST" и не выводить его в чат
поймать то поймал, а как предотвратить его вывод в чат?
По идее просто return в хук-функции
 
  • Клоун
Реакции: Fott

optimal user

Известный
Автор темы
107
6
Почему при выполнении этого кода крашатся все остальные Lua скрипты?
Комментируют sampChatHook в main - всё ок
Код:
local hook = require("hooks")

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end
    sampChatHook = hook.jmp.new("void(__thiscall *)(uintptr_t this, uint32_t type, const char* text, const char* prefix, uint32_t color, uint32_t pcolor)", sampChatHook, getModuleHandle('samp.dll') + 0x64010)
    while true do
    end
end

function sampChatHook(this, type, text, prefix, color, pcolor)
    if text:find("TEST TEST") then
        print(this)
        print(type)
        print(text)
        print(prefix)
        print(color)
        print(pcolor)
    end
end
 

AdCKuY_DpO4uLa

Адский дрочер
Друг
334
731
Это void метод, как ты собрался булевую хуйню возвращать? Или я не догоняю чего-то в луа?

Почему при выполнении этого кода крашатся все остальные Lua скрипты?
Комментируют sampChatHook в main - всё ок
Код:
local hook = require("hooks")

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end
    sampChatHook = hook.jmp.new("void(__thiscall *)(uintptr_t this, uint32_t type, const char* text, const char* prefix, uint32_t color, uint32_t pcolor)", sampChatHook, getModuleHandle('samp.dll') + 0x64010)
    while true do
    end
end

function sampChatHook(this, type, text, prefix, color, pcolor)
    if text:find("TEST TEST") then
        print(this)
        print(type)
        print(text)
        print(prefix)
        print(color)
        print(pcolor)
    end
end
Оригинальную функцию в конце вызывай (как в примере)
 
  • Клоун
Реакции: Fott

etereon

MQ-Team
Проверенный
330
856
Почему при выполнении этого кода крашатся все остальные Lua скрипты?
Комментируют sampChatHook в main - всё ок
Код:
local hook = require("hooks")

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end
    sampChatHook = hook.jmp.new("void(__thiscall *)(uintptr_t this, uint32_t type, const char* text, const char* prefix, uint32_t color, uint32_t pcolor)", sampChatHook, getModuleHandle('samp.dll') + 0x64010)
    while true do
    end
end

function sampChatHook(this, type, text, prefix, color, pcolor)
    if text:find("TEST TEST") then
        print(this)
        print(type)
        print(text)
        print(prefix)
        print(color)
        print(pcolor)
    end
end
Попробуй так:
"void(__fastcall*)(uintptr_t this, void* edx, uint32_t type, const char* text, const char* prefix, uint32_t color, uint32_t pcolor)"
function sampChatHook(this, edx, type, text, prefix, color, pcolor)
+ тебе надо вызывать оригинальную функу из хука
 

optimal user

Известный
Автор темы
107
6
Вызываю оригинальную функу, больше не крашит, но я не одупляю что-то че мне с этим теперь делать)
Хочу например в консоль вывести последнее новое сообщение при помощи хука, как такое сделать7
 

etereon

MQ-Team
Проверенный
330
856
Вызываю оригинальную функу, больше не крашит, но я не одупляю что-то че мне с этим теперь делать)
Хочу например в консоль вывести последнее новое сообщение при помощи хука, как такое сделать7
const char* text надо прогнать через ffi.string (тогда из сишной строки получишь луашную)
 
  • Нравится
Реакции: optimal user и ARMOR

optimal user

Известный
Автор темы
107
6
const char* text надо прогнать через ffi.string (тогда из сишной строки получишь луашную)
Так, это опять я)
С этим разобрался, работает
Изменять строку и возвращать ту, что сам хочу - тоже понял
Но как предотвратить вывод строки с определенным содержанием? Я знаю точно что это возможно, но как - не могу понять
 

etereon

MQ-Team
Проверенный
330
856
Так, это опять я)
С этим разобрался, работает
Изменять строку и возвращать ту, что сам хочу - тоже понял
Но как предотвратить вывод строки с определенным содержанием? Я знаю точно что это возможно, но как - не могу понять
Просто не вызывать оригинал
 
  • Нравится
Реакции: optimal user