
04.08.2023, 07:34
|
|
Флудер
Регистрация: 19.06.2022
Сообщений: 2,997
С нами:
2055431
Репутация:
3
|
|
Сообщение от danivjje
если зайти на занятый никнейм/никнейм с запрещенными символами то клиент в консоль выводит Bad nickname, это отловить как-то можно?
Да, можно, если не через пакет, так через текст в консоли (сегодня посмотрю, если получится - скину код)
upd: Вот код, хз какой пакет приходит
Lua:
Код:
local
ffi
=
require
(
"ffi"
)
--HOOKS
local
hook
=
{
hooks
=
{
}
}
registerHandler
(
"onUnload"
,
function
(
)
for
i
,
hook
in
ipairs
(
hook
.
hooks
)
do
if
hook
.
status
then
hook
.
stop
(
)
end
end
end
)
ffi
.
cdef
[[
int VirtualProtect(void* lpAddress, unsigned long dwSize, unsigned long flNewProtect, unsigned long* lpflOldProtect);
]]
function
hook
.
new
(
cast
,
callback
,
hook_addr
,
size
)
jit
.
off
(
callback
,
true
)
--off jit compilation | thx FYP
local
size
=
size
or
5
local
new_hook
=
{
}
local
detour_addr
=
tonumber
(
ffi
.
cast
(
"intptr_t"
,
ffi
.
cast
(
"void*"
,
ffi
.
cast
(
cast
,
callback
)
)
)
)
local
void_addr
=
ffi
.
cast
(
"void*"
,
hook_addr
)
local
old_prot
=
ffi
.
new
(
"unsigned long[1]"
)
local
org_bytes
=
ffi
.
new
(
"uint8_t[?]"
,
size
)
ffi
.
copy
(
org_bytes
,
void_addr
,
size
)
local
hook_bytes
=
ffi
.
new
(
"uint8_t[?]"
,
size
,
0x90
)
hook_bytes
[
0
]
=
0xE9
ffi
.
cast
(
"uint32_t*"
,
hook_bytes
+
1
)
[
0
]
=
detour_addr
-
hook_addr
-
5
new_hook
.
call
=
ffi
.
cast
(
cast
,
hook_addr
)
new_hook
.
status
=
false
local
function
set_status
(
bool
)
new_hook
.
status
=
bool
ffi
.
C
.
VirtualProtect
(
void_addr
,
size
,
0x40
,
old_prot
)
ffi
.
copy
(
void_addr
,
bool
and
hook_bytes
or
org_bytes
,
size
)
ffi
.
C
.
VirtualProtect
(
void_addr
,
size
,
old_prot
[
0
]
,
old_prot
)
end
new_hook
.
stop
=
function
(
)
set_status
(
false
)
end
new_hook
.
start
=
function
(
)
set_status
(
true
)
end
new_hook
.
start
(
)
table
.
insert
(
hook
.
hooks
,
new_hook
)
return
setmetatable
(
new_hook
,
{
__call
=
function
(
self
,
...
)
self
.
stop
(
)
local
res
=
self
.
call
(
...
)
self
.
start
(
)
return
res
end
}
)
end
--HOOKS
local
originalErrorClientJoin
function
errorClientJoin
(
...
)
print
(
"errorClientJoin"
)
return
originalErrorClientJoin
(
...
)
end
originalErrorClientJoin
=
hook
.
new
(
"void*(__cdecl*)(void*)"
,
errorClientJoin
,
0x459550
)
|
|
|

04.08.2023, 15:08
|
|
Участник форума
Регистрация: 04.09.2021
Сообщений: 279
С нами:
2469456
Репутация:
33
|
|
Сообщение от why ega
Да, можно, если не через пакет, так через текст в консоли (сегодня посмотрю, если получится - скину код)
upd: Вот код, хз какой пакет приходит
Lua:
Код:
local
ffi
=
require
(
"ffi"
)
--HOOKS
local
hook
=
{
hooks
=
{
}
}
registerHandler
(
"onUnload"
,
function
(
)
for
i
,
hook
in
ipairs
(
hook
.
hooks
)
do
if
hook
.
status
then
hook
.
stop
(
)
end
end
end
)
ffi
.
cdef
[[
int VirtualProtect(void* lpAddress, unsigned long dwSize, unsigned long flNewProtect, unsigned long* lpflOldProtect);
]]
function
hook
.
new
(
cast
,
callback
,
hook_addr
,
size
)
jit
.
off
(
callback
,
true
)
--off jit compilation | thx FYP
local
size
=
size
or
5
local
new_hook
=
{
}
local
detour_addr
=
tonumber
(
ffi
.
cast
(
"intptr_t"
,
ffi
.
cast
(
"void*"
,
ffi
.
cast
(
cast
,
callback
)
)
)
)
local
void_addr
=
ffi
.
cast
(
"void*"
,
hook_addr
)
local
old_prot
=
ffi
.
new
(
"unsigned long[1]"
)
local
org_bytes
=
ffi
.
new
(
"uint8_t[?]"
,
size
)
ffi
.
copy
(
org_bytes
,
void_addr
,
size
)
local
hook_bytes
=
ffi
.
new
(
"uint8_t[?]"
,
size
,
0x90
)
hook_bytes
[
0
]
=
0xE9
ffi
.
cast
(
"uint32_t*"
,
hook_bytes
+
1
)
[
0
]
=
detour_addr
-
hook_addr
-
5
new_hook
.
call
=
ffi
.
cast
(
cast
,
hook_addr
)
new_hook
.
status
=
false
local
function
set_status
(
bool
)
new_hook
.
status
=
bool
ffi
.
C
.
VirtualProtect
(
void_addr
,
size
,
0x40
,
old_prot
)
ffi
.
copy
(
void_addr
,
bool
and
hook_bytes
or
org_bytes
,
size
)
ffi
.
C
.
VirtualProtect
(
void_addr
,
size
,
old_prot
[
0
]
,
old_prot
)
end
new_hook
.
stop
=
function
(
)
set_status
(
false
)
end
new_hook
.
start
=
function
(
)
set_status
(
true
)
end
new_hook
.
start
(
)
table
.
insert
(
hook
.
hooks
,
new_hook
)
return
setmetatable
(
new_hook
,
{
__call
=
function
(
self
,
...
)
self
.
stop
(
)
local
res
=
self
.
call
(
...
)
self
.
start
(
)
return
res
end
}
)
end
--HOOKS
local
originalErrorClientJoin
function
errorClientJoin
(
...
)
print
(
"errorClientJoin"
)
return
originalErrorClientJoin
(
...
)
end
originalErrorClientJoin
=
hook
.
new
(
"void*(__cdecl*)(void*)"
,
errorClientJoin
,
0x459550
)
А принтлог не проще?😹
|
|
|

05.08.2023, 02:54
|
|
Познавший АНТИЧАТ
Регистрация: 29.09.2018
Сообщений: 1,292
С нами:
4012500
Репутация:
138
|
|
Сообщение от why ega
Да, можно, если не через пакет, так через текст в консоли (сегодня посмотрю, если получится - скину код)
upd: Вот код, хз какой пакет приходит
Lua:
Код:
local
ffi
=
require
(
"ffi"
)
--HOOKS
local
hook
=
{
hooks
=
{
}
}
registerHandler
(
"onUnload"
,
function
(
)
for
i
,
hook
in
ipairs
(
hook
.
hooks
)
do
if
hook
.
status
then
hook
.
stop
(
)
end
end
end
)
ffi
.
cdef
[[
int VirtualProtect(void* lpAddress, unsigned long dwSize, unsigned long flNewProtect, unsigned long* lpflOldProtect);
]]
function
hook
.
new
(
cast
,
callback
,
hook_addr
,
size
)
jit
.
off
(
callback
,
true
)
--off jit compilation | thx FYP
local
size
=
size
or
5
local
new_hook
=
{
}
local
detour_addr
=
tonumber
(
ffi
.
cast
(
"intptr_t"
,
ffi
.
cast
(
"void*"
,
ffi
.
cast
(
cast
,
callback
)
)
)
)
local
void_addr
=
ffi
.
cast
(
"void*"
,
hook_addr
)
local
old_prot
=
ffi
.
new
(
"unsigned long[1]"
)
local
org_bytes
=
ffi
.
new
(
"uint8_t[?]"
,
size
)
ffi
.
copy
(
org_bytes
,
void_addr
,
size
)
local
hook_bytes
=
ffi
.
new
(
"uint8_t[?]"
,
size
,
0x90
)
hook_bytes
[
0
]
=
0xE9
ffi
.
cast
(
"uint32_t*"
,
hook_bytes
+
1
)
[
0
]
=
detour_addr
-
hook_addr
-
5
new_hook
.
call
=
ffi
.
cast
(
cast
,
hook_addr
)
new_hook
.
status
=
false
local
function
set_status
(
bool
)
new_hook
.
status
=
bool
ffi
.
C
.
VirtualProtect
(
void_addr
,
size
,
0x40
,
old_prot
)
ffi
.
copy
(
void_addr
,
bool
and
hook_bytes
or
org_bytes
,
size
)
ffi
.
C
.
VirtualProtect
(
void_addr
,
size
,
old_prot
[
0
]
,
old_prot
)
end
new_hook
.
stop
=
function
(
)
set_status
(
false
)
end
new_hook
.
start
=
function
(
)
set_status
(
true
)
end
new_hook
.
start
(
)
table
.
insert
(
hook
.
hooks
,
new_hook
)
return
setmetatable
(
new_hook
,
{
__call
=
function
(
self
,
...
)
self
.
stop
(
)
local
res
=
self
.
call
(
...
)
self
.
start
(
)
return
res
end
}
)
end
--HOOKS
local
originalErrorClientJoin
function
errorClientJoin
(
...
)
print
(
"errorClientJoin"
)
return
originalErrorClientJoin
(
...
)
end
originalErrorClientJoin
=
hook
.
new
(
"void*(__cdecl*)(void*)"
,
errorClientJoin
,
0x459550
)
А нахуя? Там разве память под протекцией?
|
|
|

05.08.2023, 07:27
|
|
Флудер
Регистрация: 19.06.2022
Сообщений: 2,997
С нами:
2055431
Репутация:
3
|
|
Сообщение от F0RQU1N and
А нахуя? Там разве память под протекцией?
Как любой уважаемый себя луашер, спиздил код жмп хуков и не стал особо ничего менять
|
|
|

04.08.2023, 20:26
|
|
Новичок
Регистрация: 09.06.2016
Сообщений: 27
С нами:
5224343
Репутация:
53
|
|
Сообщение от danivjje
если зайти на занятый никнейм/никнейм с запрещенными символами то клиент в консоль выводит Bad nickname, это отловить как-то можно?
Lua:
Код:
function
onReceiveRPC
(
id
,
bs
)
if
id
==
130
then
print
(
'Bad nickname/online'
)
exit
(
)
end
end
|
|
|

04.08.2023, 20:51
|
|
Участник форума
Регистрация: 09.02.2023
Сообщений: 114
С нами:
1716232
Репутация:
23
|
|
Скажите плиз как можно сделать что бы бот зажимал W на несколько секунд?
|
|
|

06.08.2023, 15:24
|
|
Новичок
Регистрация: 09.06.2016
Сообщений: 27
С нами:
5224343
Репутация:
53
|
|
Сообщение от Жоский поцик
Скажите плиз как можно сделать что бы бот зажимал W на несколько секунд?
Lua:
Код:
local
hook
=
require
(
"samp.events"
)
require
(
"addon"
)
function
pressKey
(
keyId
,
pressTime
)
print
(
'Pressed key:'
,
keyId
)
key
=
keyId
press
=
true
newTask
(
function
(
)
press
=
nil
key
=
nil
end
,
pressTime
)
end
function
hook
.
onSendPlayerSync
(
data
)
if
pressKey
then
data
.
upDownKeys
=
key
end
end
function
onRunCommand
(
cmd
)
if
cmd
:
find
(
"^!pkey %d+ %d+$"
)
then
local
_k
,
_t
=
cmd
:
match
(
"^!pkey (%d+) (%d+)$"
)
pressKey
(
tonumber
(
_k
)
,
tonumber
(
_t
)
)
return
false
end
end
function
hook
.
onSendPlayerSync
(
data
)
if
press
then
data
.
upDownKeys
=
key
end
end
Вводишь в консоль "!pkey 65408 2000", и бот на две секунды зажмёт клавишу "W".
(Если введёшь 128 вместо 65408, то зажмёт клавишу "S")
Можно еще просто в коде:
Lua:
Код:
pressKey
(
65408
,
2000
)
Со стороны будет выглядеть так, будто ты идёшь на месте. Если тебе нужно прямо пройтись, а не зажать кнопку, то придётся писать более объёмный скрипт.
Сообщение от tfornik
при вызове runCommand('!reloadlua') - крашит раксамп
есть рабочее решение?
Смотря для какой цели. Если для разработки, то можно просто перезапускать RakSamp. Да, ошибка присутствует. Краша пока что не избежать, насколько мне известно. Если ты пишешь бота и хочешь быстро очистить все переменные во время реконнект и/или дисконнекта, то сохраняй все данные в таблицу, а потом пересоздай эту таблицу.
Пример:
Lua:
Код:
local
hook
=
require
(
"samp.events"
)
bot
=
{
}
function
onLoad
(
)
bot
.
nickname
=
"Nick_Name"
bot
.
password
=
"123123"
end
function
hook
.
onSetPlayerPos
(
pos
)
bot
.
position
=
pos
end
-- Очищаем во время дисконнекта
function
onDisconnect
(
)
bot
=
{
}
end
|
|
|

06.08.2023, 17:45
|
|
Участник форума
Регистрация: 09.02.2023
Сообщений: 114
С нами:
1716232
Репутация:
23
|
|
Сообщение от sasha__1
Lua:
Код:
local
hook
=
require
(
"samp.events"
)
function
pressKey
(
keyId
,
pressTime
)
key
=
keyId
pressKey
=
true
newTask
(
function
(
)
pressKey
=
nil
key
=
nil
end
,
pressTime
)
end
function
hook
.
onSendPlayerSync
(
data
)
if
pressKey
then
data
.
upDownKeys
=
key
end
end
function
onRunCommand
(
cmd
)
if
cmd
:
find
(
"^!pkey %d+ %d+$"
)
then
local
_k
,
_t
=
cmd
:
match
(
"^!pkey (%d+) (%d+)$"
)
pressKey
(
tonumber
(
_k
)
,
tonumber
(
_t
)
)
return
false
end
end
Вводишь в консоль "!pkey 65408 2000", и бот на две секунды зажмёт клавишу "W".
(Если введёшь 128 вместо 65408, то зажмёт клавишу "S")
Можно еще просто в коде:
Lua:
Код:
pressKey
(
65408
,
2000
)
Со стороны будет выглядеть так, будто ты идёшь на месте. Если тебе нужно прямо пройтись, а не зажать кнопку, то придётся писать более объёмный скрипт.
Сначало, как зашёл, написало что loaded, как reqspawn*улся - начало каждую секунду флудить этим, что делать?

|
|
|

06.08.2023, 19:31
|
|
Новичок
Регистрация: 09.06.2016
Сообщений: 27
С нами:
5224343
Репутация:
53
|
|
Сообщение от Жоский поцик
Сначало, как зашёл, написало что loaded, как reqspawn*улся - начало каждую секунду флудить этим, что делать?
Исправил. скопируй еще раз
|
|
|

06.08.2023, 15:23
|
|
Постоянный
Регистрация: 02.06.2022
Сообщений: 334
С нами:
2080425
Репутация:
68
|
|
при вызове runCommand('!reloadlua') - крашит раксамп
есть рабочее решение?
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|