 |
|

06.04.2020, 22:38
|
|
Новичок
Регистрация: 30.03.2020
Сообщений: 7
С нами:
3222983
Репутация:
3
|
|
Сообщение от loganhackerdff
как можно сделать активацию на команду в asi?
C++:
Код:
#define SAMP_INPUT_INFO 0x21A0E8
#define SAMP_FUNC_REGISTERCMD 0x65AD0
BOOL
RegisterChatCommand
(
LPCSTR sName
,
LPVOID lpvFunction
)
{
DWORD dwSAMPAddress
=
reinterpret_cast
(
GetModuleHandleA
(
"SAMP.DLL"
)
)
;
if
(
dwSAMPAddress
)
{
LPVOID lpvInputInfo
=
*
reinterpret_cast
(
dwSAMPAddress
+
SAMP_INPUT_INFO
)
;
if
(
lpvInputInfo
)
{
reinterpret_cast
(
dwSAMPAddress
+
SAMP_FUNC_REGISTERCMD
)
(
lpvInputInfo
,
sName
,
lpvFunction
)
;
return
TRUE
;
}
}
return
FALSE
;
}
/*
Example:
LPVOID CommandHandler(LPCSTR sParams)
{
// sParams - command parameters.
}
RegisterChatCommand("CommandName", CommandHandler);
*/
|
|
|

07.04.2020, 00:36
|
|
Новичок
Регистрация: 21.03.2020
Сообщений: 17
С нами:
3235828
Репутация:
3
|
|
Сообщением ранее искал адрес памяти для клавиш гта и получил ответ. Выполнил следующий код:
C++:
Код:
while
(
bThread
)
{
*
(
int
*
)
(
0xB73458
+
0x3
)
=
255
;
}
Все работает, но довольно часто останавливается, будто на микросекунду отжал клавишу
|
|
|

07.04.2020, 00:41
|
|
Новичок
Регистрация: 30.03.2020
Сообщений: 7
С нами:
3222983
Репутация:
3
|
|
|
|
|

07.04.2020, 01:57
|
|
Новичок
Регистрация: 21.03.2020
Сообщений: 17
С нами:
3235828
Репутация:
3
|
|
Теперь перестал воспроизводить нажатие, хотя любой другой код исполняется
C++:
Код:
SA
->
getSignals
(
)
->
onLoop
+=
[
&
]
(
)
{
if
(
bTest
)
*
(
int
*
)
(
0xB73458
+
0x3
)
=
255
;
}
;
|
|
|

07.04.2020, 02:05
|
|
Новичок
Регистрация: 21.03.2020
Сообщений: 17
С нами:
3235828
Репутация:
3
|
|
Сообщение от Deprecation
C++:
Код:
*
reinterpret_cast
(
0xB73458
+
0x3
)
=
255
;
// Если не сработает, присвой 128.
Что 255, что 128 - не работает
|
|
|

07.04.2020, 02:22
|
|
Новичок
Регистрация: 21.03.2020
Сообщений: 17
С нами:
3235828
Репутация:
3
|
|
Сообщение от Deprecation
Нет возможности сейчас проверить, по крайней мере такой код работает идеально:
C++:
Код:
CreateThread
(
nullptr
,
0
,
[
]
(
LPVOID lpvThreadParameters
)
->
DWORD
{
while
(
true
)
*
reinterpret_cast
(
0xB73458
+
0x3
)
=
255
;
return
0U
;
}
,
nullptr
,
0
,
nullptr
)
;
Это тоже останавливает
|
|
|

07.04.2020, 02:27
|
|
Новичок
Регистрация: 21.03.2020
Сообщений: 17
С нами:
3235828
Репутация:
3
|
|
Сообщение от Deprecation
Попробуй именно технику отжатия/зажатия, т.е присвоить 0/128.
Ну если так сделать, то оно повторяет это. Персонаж по шагу двигается
|
|
|

07.04.2020, 02:31
|
|
Новичок
Регистрация: 21.03.2020
Сообщений: 17
С нами:
3235828
Репутация:
3
|
|
Сообщение от Deprecation
Ты на время зажимай, а не в каждой итерации зажимай/отжимай.
Ну теперь он это делает по заданному таймеру
|
|
|

07.04.2020, 02:38
|
|
Новичок
Регистрация: 21.03.2020
Сообщений: 17
С нами:
3235828
Репутация:
3
|
|
Сообщение от Deprecation
Смотри, когда ты присваиваешь 128 - ты зажимаешь клавишу, когда 0 - отжимаешь.
Можешь просто присвоить 128 и он у тебя вечно бежать будет.
Ну я понимаю, что 128 - воспроизведение клавиши, а 0 - отжатие. Если просто поставить 128, то он все равно на микросекунду остановится. А если делать 0/128, то он просто это делает по заданному времени
|
|
|

07.04.2020, 15:21
|
|
Флудер
Регистрация: 26.10.2013
Сообщений: 4,924
С нами:
6603505
Репутация:
183
|
|
Сообщение от ucciModd
Ну я понимаю, что 128 - воспроизведение клавиши, а 0 - отжатие. Если просто поставить 128, то он все равно на микросекунду остановится. А если делать 0/128, то он просто это делает по заданному времени
Попробуй писать еще и по этому адресу: 0x00B7358C
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|