[LUA] Как скрывать диалоги на луа

Eupie

Известный
Автор темы
27
5
Версия SA-MP
  1. 0.3.7 (R1)
  2. 0.3.7-R2
  3. 0.3.7-R3
  4. 0.3.7-R4
Здравствуйте, мне нужен пример скрипта диалог хайдер на луа, или кусок кода в пример. Давно делал его, спустя 2 года забыл все уже. Нужны эти несколько строчек в мой скрипт. Там вроде что-то с памятью делается, меняются какие-то значения. Видел тему какого-то человечка на бласте с его готовой функцией по скрытию диалогов, но это не то. Там он скрывает на время действующий диалог, но мне нужно чтобы у сервера не было возможности вприципе мне показать диалог. То есть диалоги у меня не отображались, пока я не выключу этот диалог хайдер.
 

SAsha133777

Потрачен
128
109
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Lua:
enableDialog(true) -- true показать, false скрыть

function enableDialog(bool)
    writeMemory(sampGetDialogInfoPtr() + 40, 2, bool and 1 or 0, true)
    sampToggleCursor(bool)
end
 

Eupie

Известный
Автор темы
27
5
Клео и луа выбирай
это скрипт на 0.3DL, тем более там пометка "Неактуально", я находил эту тему, пробовал тот же код, не работает

Lua:
enableDialog(true) -- true показать, false скрыть

function enableDialog(bool)
    writeMemory(sampGetDialogInfoPtr() + 40, 2, bool and 1 or 0, true)
    sampToggleCursor(bool)
end
это скрывает действующий диалог, а мне нужно отключить показ диалогов вприципе

это скрипт на 0.3DL, тем более там пометка "Неактуально", я находил эту тему, пробовал тот же код, не работает


это скрывает действующий диалог, а мне нужно отключить показ диалогов вприципе
а нет, перепутал функцию указателя на структуру диалогов с функцией вовзращения диалога, вроде все правильно, сейчас проверю

нет, к сожалению не работает данный код, все идет вроде как надо, но диалоги все равно показываются
 
Последнее редактирование:

SAsha133777

Потрачен
128
109
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
ноп через память, ещё можно и через функцию сампфукса или самп.луа

на луа можно переписать
CLEO:
// Вариант 1 > Hook .
{$CLEO}
0000:
 
:SAMPAv
wait 0
if and
0ADC:   test_cheat "NOP"
0AFA:  is_samp_available
jf @SAMPAv
0BE3: raknet setup_incoming_rpc_hook @RPC
 
:NopOff
wait 0
0ADC:   test_cheat "NOP"
jf @NopOff
0BE3: raknet setup_incoming_rpc_hook @RPC_Ret
jump @SAMPAv
 
:RPC
0BE5: raknet 0@ = get_hook_param 1
0039:   0@ == 12
jf @RPC_Ret
0BE0: raknet hook_ret 0
 
:RPC_Ret
0BE0: raknet hook_ret 1
 
 
 
// Вариант 2 > Write Samp Mem
{$CLEO}
0000:
 
:SAMPAv
wait 0
if and
0ADC:   test_cheat "NOP"
0AFA:  is_samp_available
jf @SAMPAv
0B2E: 3@ = read_samp_memory offset 0x15970 size 2
0B2D: write_samp_memory offset 0x15970 value 0xC390 size 2
 
:NopOff
wait 0
0ADC:   test_cheat "NOP"
jf @NopOff
0B2D: write_samp_memory offset 0x15970 value 3@ size 2
jump @SAMPAv
 

Eupie

Известный
Автор темы
27
5
ноп через память, ещё можно и через функцию сампфукса или самп.луа

на луа можно переписать
CLEO:
// Вариант 1 > Hook .
{$CLEO}
0000:

:SAMPAv
wait 0
if and
0ADC:   test_cheat "NOP"
0AFA:  is_samp_available
jf @SAMPAv
0BE3: raknet setup_incoming_rpc_hook @RPC

:NopOff
wait 0
0ADC:   test_cheat "NOP"
jf @NopOff
0BE3: raknet setup_incoming_rpc_hook @RPC_Ret
jump @SAMPAv

:RPC
0BE5: raknet 0@ = get_hook_param 1
0039:   0@ == 12
jf @RPC_Ret
0BE0: raknet hook_ret 0

:RPC_Ret
0BE0: raknet hook_ret 1



// Вариант 2 > Write Samp Mem
{$CLEO}
0000:

:SAMPAv
wait 0
if and
0ADC:   test_cheat "NOP"
0AFA:  is_samp_available
jf @SAMPAv
0B2E: 3@ = read_samp_memory offset 0x15970 size 2
0B2D: write_samp_memory offset 0x15970 value 0xC390 size 2

:NopOff
wait 0
0ADC:   test_cheat "NOP"
jf @NopOff
0B2D: write_samp_memory offset 0x15970 value 3@ size 2
jump @SAMPAv
на клео это понятно, но мне нужно именно на луа сделать такое, говорю же, мне это вшить в мой скрипт нужно
 

SAsha133777

Потрачен
128
109
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Вот этими функциями, адреса для конкретных нопов там в ссылке.

в клео
0B2D: write_samp_memory offset 0x15970 value 3@ size 2
0B2E: 3@ = read_samp_memory offset 0x15970 size 2

в луа
writeMemory(uint address, uint size, int value, bool virtualProtect) -- (записывает значение в память процесса по указанному адресу. для записи дробного нужно предварительно конвертировать его в целое функцией 'representFloatAsInt'. аналог опкода CLEO 0A8C)
int value = readMemory(uint address, uint size, bool virtualProtect) -- (читает значение из памяти процесса по указанному адресу. для чтения дробного нужно конвертировать результирующее значение функцией 'representIntAsFloat'. аналог опкода CLEO 0A8D)
 

Eupie

Известный
Автор темы
27
5
Вот этими функциями, адреса для конкретных нопов там в ссылке.

в клео
0B2D: write_samp_memory offset 0x15970 value 3@ size 2
0B2E: 3@ = read_samp_memory offset 0x15970 size 2

в луа
writeMemory(uint address, uint size, int value, bool virtualProtect) -- (записывает значение в память процесса по указанному адресу. для записи дробного нужно предварительно конвертировать его в целое функцией 'representFloatAsInt'. аналог опкода CLEO 0A8C)
int value = readMemory(uint address, uint size, bool virtualProtect) -- (читает значение из памяти процесса по указанному адресу. для чтения дробного нужно конвертировать результирующее значение функцией 'representIntAsFloat'. аналог опкода CLEO 0A8D)
попробовал этими функциями, не работает почему-то, может я тупой и что-то не так сделал
function dh_hide()
if dialogHide == false
then
mem = readMemory(0x15970, 2, true)
writeMemory(0x15970, 2, 0xC390, true)
dialogHide = true
sampAddChatMessage("DialogHider включен.", -1)
else
writeMemory(0x15970, 2, mem, true)
dialogHide = false
sampAddChatMessage("DialogHider отключен.", -1)
end
end

может нужно подключить какую-то библиотеку в начале скрипта?
 
Последнее редактирование:

SAsha133777

Потрачен
128
109
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
попробовал этими функциями, не работает почему-то, может я тупой и что-то не так сделал


может нужно подключить какую-то библиотеку в начале скрипта?
адреса на другие нопы надо, 0x15970 это из урока, в описании видео там есть ссылка на адреса
0xCBB0 адрес на ноп диалогов
и ещё вроде адрес надо так писать sampGetBase() + 0x15970 ((( writeMemory(sampGetBase() + 0x15970, 2, 0xC390, true) )))


Проще так:
функцией сампфукса
Lua:
function onReceiveRpc(id)
    if id == 61 then
        return false
    end
end

с библиотекой самп.луа
Lua:
local sampev = require('lib.samp.events')

function sampev.onShowDialog()
    return false
end
 
Последнее редактирование:

Eupie

Известный
Автор темы
27
5
адреса на другие нопы надо, 0x15970 это из урока
и ещё вроде адрес надо так писать sampGetBase() + 0x15970

Lua:
function onReceiveRpc(id)
    if id == 61 then
        return false
    end
end
Lua:
local sampev = require('lib.samp.events')

function sampev.onShowDialog()
    return false
end
оооо, а вот с перехватом RPC сработало, спасибо большое!