ID_Heaven
Известный
- 812
- 294
А что за шрифт-то используешь? И худ? Скажи пожалуйстапросто пропиши в sa-mp.cfg: fontface=название шрифта
А что за шрифт-то используешь? И худ? Скажи пожалуйстапросто пропиши в sa-mp.cfg: fontface=название шрифта
Худ встроенный в лаунчер, шрифт Fira CodeА что за шрифт-то используешь? И худ? Скажи пожалуйста
потому что я в последний момент решил, что ffi каст к char* лишний, а он был не лишнимЯ не знаю почему но у меня это не работает.
потому что я в последний момент решил, что ffi каст к char* лишний, а он был не лишним
sprintfHook = hook.new('int(__cdecl *)(int buf, char *fmt, char *nick, int ID)', sprintfHook, getModuleHandle('samp.dll') + 0xB5BF3, 6)
ffi.string('%s {FFFFFF}(%03d)')
sprintfHook = hook.new('int(__cdecl *)(int buf, const char *fmt, char *nick, int ID)', sprintfHook, getModuleHandle('samp.dll') + 0xC7B93, 6)
function sprintfHook(buf, fmt, nick, ID)
if buf == getModuleHandle('samp.dll') + 0x1409C8 then
return sprintfHook(buf, '%s {FFFFFF}(%03d)', nick, ID)
else
return sprintfHook(buf, fmt, nick, ID)
end
end
Не работает:но ведь у второго аргумента же тип const char*Lua:sprintfHook = hook.new('int(__cdecl *)(int buf, char *fmt, char *nick, int ID)', sprintfHook, getModuleHandle('samp.dll') + 0xB5BF3, 6)
что ты тут хотел сделать, достаточно просто передать строку, она в луа и так константная и является указателемLua:ffi.string('%s {FFFFFF}(%03d)')
Lua:sprintfHook = hook.new('int(__cdecl *)(int buf, const char *fmt, char *nick, int ID)', sprintfHook, getModuleHandle('samp.dll') + 0xC7B93, 6) function sprintfHook(buf, fmt, nick, ID) if buf == getModuleHandle('samp.dll') + 0x1409C8 then return sprintfHook(buf, '%s {FFFFFF}(%03d)', nick, ID) else return sprintfHook(buf, fmt, nick, ID) end end
а ещё у тебя там код сломан, лишняя скобка
function main()
sprintfHook = hook.new('int(__cdecl *)(int buf, char *fmt, char *nick, int ID)', sprintfHook, getModuleHandle('samp.dll') + 0xB5BF3, 6)
end
function sprintfHook(buf, fmt, nick, ID)
if buf == getModuleHandle('samp.dll') + 0x12C848 then
return sprintfHook(buf, "%s {FFFFFF}(%03d)", nick, ID)
else
return sprintfHook(buf, fmt, nick, ID)
end
end
function main()
sprintfHook = hook.new('int(__cdecl *)(int buf, char *fmt, char *nick, int ID)', sprintfHook, getModuleHandle('samp.dll') + 0xB5BF3, 6)
end
function sprintfHook(buf, fmt, nick, ID)
if buf == getModuleHandle('samp.dll') + 0x12C848 then
return sprintfHook(buf, ffi.cast('char*', ffi.string('%s {FFFFFF}(%03d)')), nick, ID)
else
return sprintfHook(buf, fmt, nick, ID)
end
end
Не работает:
sprintfHook = hook.new('int(__cdecl *)(int buf, const char *fmt, char *nick, int ID)', sprintfHook, getModuleHandle('samp.dll') + 0xB5BF3, 6) endsprintfHook = hook.new('int(__cdecl *)(int buf, char *fmt, char *nick, int ID)', sprintfHook, getModuleHandle('samp.dll') + 0xB5BF3, 6) end
Ну ок, я когда с этими хуками разбирался, и пробовал похукать не функцию, а ее вызов - ничего не работало и я все строки оборачивал в каст, после переноса хука все заработало, когда оставил каст только на формате. Заливая я его удалил, но выше @Tema05 написал, что так у него не работает, и я вернул каст, с котором все работало, когда я тестилПосмотреть вложение 76487
sprintfHook = hook.new('int(__cdecl *)(int buf, const char *fmt, char *nick, int ID)', sprintfHook, getModuleHandle('samp.dll') + 0xB5BF3, 6) end
тип
P.S. ты не вставил сам cast, а вставил скобки.потому что я в последний момент решил, что ffi каст к char* лишний, а он был не лишним
local ffi = require 'ffi'
ffi.cdef[[
int VirtualProtect(void* lpAddress, unsigned long dwSize, unsigned long flNewProtect, unsigned long* lpflOldProtect);
]]
function main()
local void_addr = ffi.cast('void*', getModuleHandle('samp.dll') + 0x70F45)
local old_prot = ffi.new('unsigned long[1]')
local chars = ffi.new('const char[18]', '%s {FFFFFF}(%03d)')
ffi.C.VirtualProtect(void_addr, 4, 0x40, old_prot)
ffi.cast('uint32_t*', void_addr)[0] = tonumber(ffi.cast('intptr_t', chars))
ffi.C.VirtualProtect(void_addr, 4, old_prot[0], old_prot)
addEventHandler('onScriptTerminate', function(scr)
if scr == script.this then
ffi.C.VirtualProtect(void_addr, 4, 0x40, old_prot)
ffi.cast('uint32_t*', void_addr)[0] = getModuleHandle('samp.dll') + 0xD835C
ffi.C.VirtualProtect(void_addr, 4, old_prot[0], old_prot)
end
end)
wait(-1)
end
local ffi = require 'ffi'
ffi.cdef[[
int VirtualProtect(void* lpAddress, unsigned long dwSize, unsigned long flNewProtect, unsigned long* lpflOldProtect);
void *malloc(size_t size);
void free(void *ptr);
]]
function main()
local void_addr = ffi.cast('void*', getModuleHandle('samp.dll') + 0x70F45)
local old_prot = ffi.new('unsigned long[1]')
local chars = ffi.C.malloc(18)
ffi.copy(chars, '%s {FFFFFF}(%03d)\0', 18)
ffi.C.VirtualProtect(void_addr, 4, 0x40, old_prot)
ffi.cast('uint32_t*', void_addr)[0] = tonumber(ffi.cast('intptr_t', chars))
ffi.C.VirtualProtect(void_addr, 4, old_prot[0], old_prot)
addEventHandler('onScriptTerminate', function(scr)
if scr == script.this then
ffi.C.VirtualProtect(void_addr, 4, 0x40, old_prot)
ffi.cast('uint32_t*', void_addr)[0] = getModuleHandle('samp.dll') + 0xD835C
ffi.C.VirtualProtect(void_addr, 4, old_prot[0], old_prot)
ffi.C.free(chars)
end
end)
wait(-1)
end
А как тут тогда внедрить фильтр на определённые ники и получить id?@SR_team на луа, R1
Lua:local ffi = require 'ffi' ffi.cdef[[ int VirtualProtect(void* lpAddress, unsigned long dwSize, unsigned long flNewProtect, unsigned long* lpflOldProtect); ]] function main() local void_addr = ffi.cast('void*', getModuleHandle('samp.dll') + 0x70F45) local old_prot = ffi.new('unsigned long[1]') local chars = ffi.new('const char[18]', '%s {FFFFFF}(%03d)') ffi.C.VirtualProtect(void_addr, 4, 0x40, old_prot) ffi.cast('uint32_t*', void_addr)[0] = tonumber(ffi.cast('intptr_t', chars)) ffi.C.VirtualProtect(void_addr, 4, old_prot[0], old_prot) addEventHandler('onScriptTerminate', function(scr) if scr == script.this then ffi.C.VirtualProtect(void_addr, 4, 0x40, old_prot) ffi.cast('uint32_t*', void_addr)[0] = getModuleHandle('samp.dll') + 0xD835C ffi.C.VirtualProtect(void_addr, 4, old_prot[0], old_prot) end end) wait(-1) end
без хука не интересно@SR_team на луа, R1
Lua:local ffi = require 'ffi' ffi.cdef[[ int VirtualProtect(void* lpAddress, unsigned long dwSize, unsigned long flNewProtect, unsigned long* lpflOldProtect); ]] function main() local void_addr = ffi.cast('void*', getModuleHandle('samp.dll') + 0x70F45) local old_prot = ffi.new('unsigned long[1]') local chars = ffi.new('const char[18]', '%s {FFFFFF}(%03d)') ffi.C.VirtualProtect(void_addr, 4, 0x40, old_prot) ffi.cast('uint32_t*', void_addr)[0] = tonumber(ffi.cast('intptr_t', chars)) ffi.C.VirtualProtect(void_addr, 4, old_prot[0], old_prot) addEventHandler('onScriptTerminate', function(scr) if scr == script.this then ffi.C.VirtualProtect(void_addr, 4, 0x40, old_prot) ffi.cast('uint32_t*', void_addr)[0] = getModuleHandle('samp.dll') + 0xD835C ffi.C.VirtualProtect(void_addr, 4, old_prot[0], old_prot) end end) wait(-1) end
Этот код не решает твою задачу, только делает ID белымА как тут тогда внедрить фильтр на определённые ники и получить id?
Зачем, если цель стояла покрасить ид?А как тут тогда внедрить фильтр на определённые ники и получить id?
Панимаю :Dбез хука не интересно