HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 04.08.2023, 07:34
вайега52
Флудер
Регистрация: 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
)
 
Ответить с цитированием

  #2  
Старый 04.08.2023, 15:08
Fluffy1560
Участник форума
Регистрация: 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
)

А принтлог не проще?😹
 
Ответить с цитированием

  #3  
Старый 05.08.2023, 02:54
F0RQU1N and
Познавший АНТИЧАТ
Регистрация: 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
)

А нахуя? Там разве память под протекцией?
 
Ответить с цитированием

  #4  
Старый 05.08.2023, 07:27
вайега52
Флудер
Регистрация: 19.06.2022
Сообщений: 2,997
С нами: 2055431

Репутация: 3


По умолчанию

Цитата:
Сообщение от F0RQU1N and  

А нахуя? Там разве память под протекцией?
Как любой уважаемый себя луашер, спиздил код жмп хуков и не стал особо ничего менять
 
Ответить с цитированием

  #5  
Старый 04.08.2023, 20:26
sasha__1
Новичок
Регистрация: 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
 
Ответить с цитированием

  #6  
Старый 04.08.2023, 20:51
Жоский поцик
Участник форума
Регистрация: 09.02.2023
Сообщений: 114
С нами: 1716232

Репутация: 23
По умолчанию

Скажите плиз как можно сделать что бы бот зажимал W на несколько секунд?
 
Ответить с цитированием

  #7  
Старый 06.08.2023, 15:24
sasha__1
Новичок
Регистрация: 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
 
Ответить с цитированием

  #8  
Старый 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*улся - начало каждую секунду флудить этим, что делать?





 
Ответить с цитированием

  #9  
Старый 06.08.2023, 19:31
sasha__1
Новичок
Регистрация: 09.06.2016
Сообщений: 27
С нами: 5224343

Репутация: 53
По умолчанию

Цитата:
Сообщение от Жоский поцик  

Сначало, как зашёл, написало что loaded, как reqspawn*улся - начало каждую секунду флудить этим, что делать?
Исправил. скопируй еще раз
 
Ответить с цитированием

  #10  
Старый 06.08.2023, 15:23
tfornik
Постоянный
Регистрация: 02.06.2022
Сообщений: 334
С нами: 2080425

Репутация: 68
По умолчанию

при вызове runCommand('!reloadlua') - крашит раксамп

есть рабочее решение?
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.