 |
|

12.09.2020, 14:09
|
|
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами:
4483143
Репутация:
183
|
|
Сообщение от kizn
как перезаписать самповскую команду? (/q к примеру)
Регистрируешь ее еще раз, и все. Либо в структуре stInputInfo изменяешь функцию (CMDPROC) на свою, поиском по зарегистрированным именам команд
C++:
Код:
typedef
void
(
__cdecl
*
CMDPROC
)
(
PCHAR
)
;
struct
stInputInfo
{
void
*
pD3DDevice
;
void
*
pDXUTDialog
;
stInputBox
*
pDXUTEditBox
;
CMDPROC pCMDs
[
SAMP_MAX_CLIENTCMDS
]
;
char
szCMDNames
[
SAMP_MAX_CLIENTCMDS
]
[
33
]
;
int
iCMDCount
;
int
iInputEnabled
;
char
szInputBuffer
[
129
]
;
char
szRecallBufffer
[
10
]
[
129
]
;
char
szCurrentBuffer
[
129
]
;
int
iCurrentRecall
;
int
iTotalRecalls
;
CMDPROC pszDefaultCMD
;
}
;
|
|
|

12.09.2020, 14:13
|
|
Флудер
Регистрация: 23.09.2017
Сообщений: 2,409
С нами:
4546268
Репутация:
183
|
|
Сообщение от KiN4StAt
Регистрируешь ее еще раз, и все.
как я понял, сф ее не перезаписывает, как это делает луа
|
|
|

12.09.2020, 14:24
|
|
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами:
4483143
Репутация:
183
|
|
Сообщение от kizn
как я понял, сф ее не перезаписывает, как это делает луа
Значит через структуру подменить CMDPROC нужно будет
|
|
|

12.09.2020, 14:31
|
|
Постоянный
Регистрация: 12.01.2018
Сообщений: 963
С нами:
4387250
Репутация:
133
|
|
Есть плагин с d3d9 рендером. Как сделать, чтобы инициализация хука происходила в нужный момент. Объясню: если поставить проверку на загрузку игры (0xC8D4C0 != 9) и сразу после нее инициализировать, то не будет работать, но если поставить после этого задержку в секунд так 10, то будет, но это такое. Мб есть какой-то адрес, отвечающий за это или что-то типа того.
|
|
|

12.09.2020, 14:38
|
|
Познавший АНТИЧАТ
Регистрация: 12.11.2015
Сообщений: 1,560
С нами:
5526867
Репутация:
183
|
|
Сообщение от checkdasound
Есть плагин с d3d9 рендером. Как сделать, чтобы инициализация хука происходила в нужный момент. Объясню: если поставить проверку на загрузку игры (0xC8D4C0 != 9) и сразу после нее инициализировать, то не будет работать, но если поставить после этого задержку в секунд так 10, то будет, но это такое. Мб есть какой-то адрес, отвечающий за это или что-то типа того.
Проверять 0xC97C28 - IDirect3DDevice9 pointer! = nullptr, после проверки делать инициальзацию
|
|
|

12.09.2020, 14:46
|
|
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами:
4483143
Репутация:
183
|
|
Сообщение от checkdasound
Есть плагин с d3d9 рендером. Как сделать, чтобы инициализация хука происходила в нужный момент. Объясню: если поставить проверку на загрузку игры (0xC8D4C0 != 9) и сразу после нее инициализировать, то не будет работать, но если поставить после этого задержку в секунд так 10, то будет, но это такое. Мб есть какой-то адрес, отвечающий за это или что-то типа того.
Думаю можно хукнуть это:
plugin-sdk/plugin_sa/game_sa/CRenderer.cpp at b38ab7b07f74ac86f4283095f0386617d12fba73 · DK22Pac/plugin-sdk
An SDK for developing ASI/CLEO plugins for GTA San Andreas, GTA Vice City and GTA III - DK22Pac/plugin-sdk
github.com
|
|
|

12.09.2020, 14:48
|
|
Постоянный
Регистрация: 28.03.2013
Сообщений: 495
С нами:
6908018
Репутация:
213
|
|
Сообщение от 4el0ve4ik
Проверять 0xC97C28 - IDirect3DDevice9 pointer! = nullptr, после проверки делать инициальзацию
такое не прокатит, он уже проверят инициализацию игры через 0xC8D4C0.
этот указатель(0xC97C28) заменяется на новый указатель при инициализации samp.dll.
нужно ждать пока пройдет инициализация замены указателя и только потом хукать, так как изначально выход идет на present от gta_sa, потом samp заменяет всю виртуальную таблицу на свою.
как вариант можно проверять какую либо структуру из samp на null
|
|
|

12.09.2020, 14:50
|
|
Постоянный
Регистрация: 12.01.2018
Сообщений: 963
С нами:
4387250
Репутация:
133
|
|
Сообщение от CleanLegend
такое не прокатит, он уже проверят инициализацию игры через 0xC8D4C0.
этот указатель(0xC97C28) заменяется на новый указатель при инициализации samp.dll.
нужно ждать пока пройдет инициализация замены указателя и только потом хукать, так как изначально выход идет на present от gta_sa, потом samp заменяет всю виртуальную таблицу на свою.
как вариант можно проверять какую либо структуру из samp на null
мне нужно было без сампа, а вариант человечика прокатил
p.s. на самом деле нет, просто я забыл задержку убрать
|
|
|

12.09.2020, 14:52
|
|
Познавший АНТИЧАТ
Регистрация: 12.11.2015
Сообщений: 1,560
С нами:
5526867
Репутация:
183
|
|
Сообщение от CleanLegend
такое не прокатит, он уже проверят инициализацию игры через 0xC8D4C0.
этот указатель(0xC97C28) заменяется на новый указатель при инициализации samp.dll.
нужно ждать пока пройдет инициализация замены указателя и только потом хукать, так как изначально выход идет на present от gta_sa, потом samp заменяет всю виртуальную таблицу на свою.
как вариант можно проверять какую либо структуру из samp на null
Че это не прокатит, просто самп будет рендерить раньше плагина и всего лишь, мы то подменим таблицу гта са, после чего самп уже заменяет измененную таблицу на свою и получится цепочка в виде самп->наш плагин->гта са
@CleanLegend работает же
C++:
Код:
void
Thread
(
void
*
)
{
while
(
*
reinterpret_cast
(
0xC97C28
)
!=
nullptr
)
Sleep
(
350
)
;
d3d3hk
=
new
D3D9Hook
(
*
reinterpret_cast
(
0xC97C28
)
)
;
d3d3hk
->
SetHook
(
&
hkdPresent
,
iPresent
)
;
d3d3hk
->
SetHook
(
&
hkdReset
,
iReset
)
;
gOriginalPresent
=
(
tPresent
)
d3d3hk
->
GetOriginalFunc
(
iPresent
)
;
gOriginalReset
=
(
tReset
)
d3d3hk
->
GetOriginalFunc
(
iReset
)
;
}
остальную часть кода нет смысла выкладывать.
|
|
|

12.09.2020, 17:05
|
|
Флудер
Регистрация: 23.09.2017
Сообщений: 2,409
С нами:
4546268
Репутация:
183
|
|
По поводу SF: да, она перезаписывает самповскую команду, ошибка была в другом. Вопрос теперь у меня другой:
- как сделать проверку, остановился ли персонаж? в PEDSELF не нашел
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|