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

  #7571  
Старый 27.07.2025, 22:46
Musaigen
Познавший АНТИЧАТ
Регистрация: 01.04.2018
Сообщений: 1,710
С нами: 4272230

Репутация: 183


По умолчанию

Цитата:
Сообщение от Smeruxa  

Вот такой вариант попробовал, он работает в случае, если играют анимации, откуда этот эффект взялся - я без понятия, случайно выявил (прыгал и забирался по стенке)
Т.е. рисует треугольник, видимо есть какой-то случай, вызывающий это

C++:





Код:
CPlayerPed
*
l
=
static_cast

(
FindPlayerPed
(
)
)
;
l
->
m_pPlayerTargettedPed
=
CPools
::
GetPed
(
sampapi
::
v037r1
::
RefNetGame
(
)
->
GetPlayerPool
(
)
->
GetAt
(
nearId
)
->
m_pPlayer
->
m_pPed
->
m_handle
)
;
l
->
DrawTriangleForMouseRecruitPed
(
)
;


Может чего-то не хватает, какого-то флага/стейта
Нет никакого флага или стейта, таргетный пед сразу чистится по адресам 0x609EE3 и 0x60BA52, если ты не в прицеле.
 
Ответить с цитированием

  #7572  
Старый 02.08.2025, 19:34
swlm
Познающий
Регистрация: 03.08.2022
Сообщений: 57
С нами: 1990627

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

Вопрос по поводу RakClient.h

Как правильно работать с Receive? То-есть, как правильно получать пакеты исходящие от сервера?

Вопрос в том, где это делать? В игровом цикле? Нужна ли какая-то задержка?

RakNet:





Код:
virtual
Packet
*
Receive
(
void
)
;


P.S. Прикол в том, что когда я использую Receive, то как будто я перехватываю пакет, и дальше уже никакие пакеты от клиента на сервер не идут.
 
Ответить с цитированием

  #7573  
Старый 02.08.2025, 20:26
вайега52
Флудер
Регистрация: 19.06.2022
Сообщений: 2,997
С нами: 2055431

Репутация: 3


По умолчанию

Цитата:
Сообщение от daun.daunovich.01  

Вопрос по поводу RakClient.h
Как правильно работать с Receive? То-есть, как правильно получать пакеты исходящие от сервера?
Вопрос в том, где это делать? В игровом цикле? Нужна ли какая-то задержка?

RakNet:





Код:
virtual
Packet
*
Receive
(
void
)
;


P.S. Прикол в том, что когда я использую Receive, то как будто я перехватываю пакет, и дальше уже никакие пакеты от клиента на сервер не идут.
Ты это делаешь внутри своего самп клиента или хукаешь самп.длл?

Если второй вариант, то тебе надо хукать вызов RakClient::Receive - вызывать оригинал, сохранять результат (полученный пакет), обрабатывать его, если это нужный тебе пакет и уже в зависимости от нужд возвращать из Хука либо nullptr (самп его не прочитает), либо результат вызова оригинала
 
Ответить с цитированием

  #7574  
Старый 02.08.2025, 20:57
swlm
Познающий
Регистрация: 03.08.2022
Сообщений: 57
С нами: 1990627

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

Цитата:
Сообщение от вайега52  

Ты это делаешь внутри своего самп клиента или хукаешь самп.длл?

Если второй вариант, то тебе надо хукать вызов RakClient::Receive - вызывать оригинал, сохранять результат (полученный пакет), обрабатывать его, если это нужный тебе пакет и уже в зависимости от нужд возвращать из Хука либо nullptr (самп его не прочитает), либо результат вызова оригинала
P.S. Я это делал в своём самп-клиенте.

Спасибо. Я так и думал, что нужно хукать вызов RakClient::Receive.

А теперь вопрос, как правильно хукать вызов RakClient::Receive?

Посмотрел в IDA PRO (sampr3.idb)

Я так понимаю, там нужно мутить что-то с RakClientInterface_vtbl?

Получать указатель на RakClientInterface, а потом с помощью оффсетов хукать функцию Receive?
 
Ответить с цитированием

  #7575  
Старый 02.08.2025, 21:32
вайега52
Флудер
Регистрация: 19.06.2022
Сообщений: 2,997
С нами: 2055431

Репутация: 3


По умолчанию

Цитата:
Сообщение от daun.daunovich.01  

P.S. Я это делал в своём самп-клиенте.

Спасибо. Я так и думал, что нужно хукать вызов RakClient::Receive.
А теперь вопрос, как правильно хукать вызов RakClient::Receive?
Посмотрел в IDA PRO (sampr3.idb)
Я так понимаю, там нужно мутить что-то с RakClientInterface_vtbl?
Получать указатель на RakClientInterface, а потом с помощью оффсетов хукать функцию Receive?
в структуре CNetGame есть указатель на RakClientInterface (pNetGame + 0x2C на R3), можешь от туда его получить и изменять указатель на метод внутри самой вмт. Либо же можешь найти адрес самой функции и хукать ее (samp.dll + 0x34AC0 на R3)
 
Ответить с цитированием

  #7576  
Старый 02.08.2025, 21:33
вайега52
Флудер
Регистрация: 19.06.2022
Сообщений: 2,997
С нами: 2055431

Репутация: 3


По умолчанию

Цитата:
Сообщение от tanksoftik  

как полностью отключить pause mune ( esc )? пробовал отключить рендер по итогу при esc экран черный и выйти из esc не получалось
Из самого простого - хукнуть WNDPROC и не пропускать сообщение для VK_ESCAPE
 
Ответить с цитированием

  #7577  
Старый 02.08.2025, 22:08
swlm
Познающий
Регистрация: 03.08.2022
Сообщений: 57
С нами: 1990627

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

Цитата:
Сообщение от вайега52  

в структуре CNetGame есть указатель на RakClientInterface (pNetGame + 0x2C на R3), можешь от туда его получить и изменять указатель на метод внутри самой вмт. Либо же можешь найти адрес самой функции и хукать ее (samp.dll + 0x34AC0 на R3)
Вот, смотри, я сделал вот так:

C++:





[CODE]
bool
Hooks
::
HookReceive
(
)
{
void
*
*
vtable
=
reinterpret_cast

(
AVSSync
::
getRakClientIntf
(
)
)
;
if
(
!
vtable
)
{
return
false
;
}
void
*
receiveAddr
=
vtable
[
9
]
;
MH_STATUS createStatus
=
MH_CreateHook
(
receiveAddr
,
&
HookedReceive
,
reinterpret_cast

(
&
originalReceive
)
)
;
if
(
createStatus
!=
MH_OK
)
{
return
false
;
}
MH_STATUS enableStatus
=
MH_EnableHook
(
receiveAddr
)
;
if
(
enableStatus
!=
MH_OK
)
{
return
false
;
}
std
::
cout



Это правильно? getRakClientIntf() возвращает указатель на RakClientInterface*
 
Ответить с цитированием

  #7578  
Старый 02.08.2025, 22:15
вайега52
Флудер
Регистрация: 19.06.2022
Сообщений: 2,997
С нами: 2055431

Репутация: 3


По умолчанию

[QUOTE="daun.daunovich.01"]

Вот, смотри, я сделал вот так:

C++:





[CODE]
bool
Hooks
::
HookReceive
(
)
{
void
*
*
vtable
=
reinterpret_cast

(
AVSSync
::
getRakClientIntf
(
)
)
;
if
(
!
vtable
)
{
return
false
;
}
void
*
receiveAddr
=
vtable
[
9
]
;
MH_STATUS createStatus
=
MH_CreateHook
(
receiveAddr
,
&
HookedReceive
,
reinterpret_cast

(
&
originalReceive
)
)
;
if
(
createStatus
!=
MH_OK
)
{
return
false
;
}
MH_STATUS enableStatus
=
MH_EnableHook
(
receiveAddr
)
;
if
(
enableStatus
!=
MH_OK
)
{
return
false
;
}
std
::
cout
 
Ответить с цитированием

  #7579  
Старый 02.08.2025, 22:32
swlm
Познающий
Регистрация: 03.08.2022
Сообщений: 57
С нами: 1990627

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

Во, сделал так:

И хук заработал, только как теперь работать с пакетами, когда я пытаюсь получить что-то из пакета, происходит краш.

C++:





[CODE]
bool
Hooks
::
HookReceive
(
)
{
Packet
*
__fastcall
HookedReceive
(
RakClientInterface__vtable
*
thisPtr
,
void
*
edx
)
{
Packet
*
packet
=
originalReceive
(
thisPtr
)
;
return
packet
;
}
HMODULE sampModule
=
GetModuleHandleA
(
"samp.dll"
)
;
if
(
!
sampModule
)
{
return
false
;
}
// Получаем указатель на рак клиент
RakClientInterface
*
*
rakclient
=
reinterpret_cast

(
AVSSync
::
getRakClientIntf
(
)
)
;
if
(
!
rakclient
)
{
return
false
;
}
DWORD
*
vTable
=
*
reinterpret_cast

(
rakclient
)
;
LPVOID target
=
reinterpret_cast

(
vTable
[
8
]
)
;
MH_STATUS createStatus
=
MH_CreateHook
(
target
,
&
HookedReceive
,
reinterpret_cast

(
&
originalReceive
)
)
;
if
(
createStatus
!=
MH_OK
)
{
return
false
;
}
MH_STATUS enableStatus
=
MH_EnableHook
(
target
)
;
if
(
enableStatus
!=
MH_OK
)
{
return
false
;
}
std
::
cout





Цитата:
Сообщение от вайега52  

Ты на какой версии сампа? Если р3, то receiveAddr - samp.dll должен совпадать 0x34AC0
На R3, но нет, не совпадает: 0x5CAF637A
 
Ответить с цитированием

  #7580  
Старый 02.08.2025, 22:41
AdCKuY_DpO4uLa
Постоянный
Регистрация: 05.08.2018
Сообщений: 372
С нами: 4091290

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

SAMP_SDK/SAMP_API_REMASTERED/SAMP/SAMP.hpp at 20f6db662727eccddadfc5305e422741fecc1f1f · DpO4uLa/SAMP_SDK

Ремастер SDK для быстрого взаимодействия с SA-MP & GTA SA - DpO4uLa/SAMP_SDK

github.com


SAMP_SDK/SAMP_API_REMASTERED/SAMP/SAMP.hpp at 20f6db662727eccddadfc5305e422741fecc1f1f · DpO4uLa/SAMP_SDK

Ремастер SDK для быстрого взаимодействия с SA-MP & GTA SA - DpO4uLa/SAMP_SDK

github.com


SAMP_SDK/SAMP_API_REMASTERED/SAMP/SAMP.hpp at 20f6db662727eccddadfc5305e422741fecc1f1f · DpO4uLa/SAMP_SDK

Ремастер SDK для быстрого взаимодействия с SA-MP & GTA SA - DpO4uLa/SAMP_SDK

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





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


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




ANTICHAT ™ © 2001- Antichat Kft.