PDA

Просмотр полной версии : С/С++ Вопрос - Ответ


Страницы : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 [31]

vmprotect
07.04.2025, 17:35
У ктхуков в контексте кажись есть метод для получения указателя на return_address. Можешь попробовать его изменить


а конкретней как это реализуется ?

fffaff123321ggg
08.04.2025, 00:31
Как нужно правильно сериализовать структуру?

NikitosikSSS
08.04.2025, 02:56
1. Можно ли как то реализовать функцию увеличение хитбокса? Есть ли в сампе, какая то функция для этого

writeline
09.04.2025, 09:19
https://forum.antichat.xyz/attachments/28597992/

Есть какая либо реализация вывода координат в углу экрана как на скрине?

nmatez
09.04.2025, 22:39
при изменении меняется для всей модели а мне надо как то сделать для определеного CVehicle


через СDog класс

Byte
09.04.2025, 23:41
Есть какая либо реализация вывода координат в углу экрана как на скрине?


SFML Используй

C++:





[CODE]
#include
#include
#include
std
::
string
formatCoordinates
(
float
x
,
float
y
,
float
z
)
{
std
::
ostringstream oss
;
oss

vmprotect
12.04.2025, 12:41
как нопнуть весь худ гташки?

ARMOR
12.04.2025, 14:30
как нопнуть весь худ гташки?



C++:






*
reinterpret_cast

(
0x58FAE0
)
=
0xC3
;

вайега52
13.04.2025, 20:00
Кто-нибудь ставил нейкид хуки на линухе х86? Посоветуйте пожалуйста библиотеку, чтобы можно было вытаскивать регистры (можно даже не через саму либу, а через инлайн асм в нейкид функах)

Byte
13.04.2025, 20:21
Кто-нибудь ставил нейкид хуки на линухе х86? Посоветуйте пожалуйста библиотеку, чтобы можно было вытаскивать регистры (можно даже не через саму либу, а через инлайн асм в нейкид функах)



GitHub - wyrover/subhook: Super-simple hooking library for C/C++ (https://github.com/wyrover/subhook?ysclid=m9fuqr0xm6941359636)

Super-simple hooking library for C/C++. Contribute to wyrover/subhook development by creating an account on GitHub.

github.com

вайега52
14.04.2025, 22:12
GitHub - wyrover/subhook: Super-simple hooking library for C/C++ (https://github.com/wyrover/subhook?ysclid=m9fuqr0xm6941359636)

Super-simple hooking library for C/C++. Contribute to wyrover/subhook development by creating an account on GitHub.

github.com



А не подскажешь, как правильно изменить значение в eax (результат вызова функи) так, чтобы асм листинг не ломался (трамплинчик вроде называется)

1744654334791.pngвайега52 · 14 Апр 2025 в 21:12' data-fancybox="lb-post-1599365" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/267822/" style="cursor: pointer;" title="1744654334791.png">
https://forum.antichat.xyz/attachments/28599365/

Byte
14.04.2025, 22:29
А не подскажешь, как правильно изменить значение в eax (результат вызова функи) так, чтобы асм листинг не ломался (трамплинчик вроде называется)



C++:






#include
subhook_t original_function_hook
;
typedef
int
(
*
original_func_t
)
(
/* параметры */
)
;
int
my_hook_function
(
/* параметры */
)
{
// Получаем трамплин и вызываем оригинальную функцию
int
result
=
(
(
original_func_t
)
subhook_get_trampoline
(
original_function_hook
)
)
(
/* параметры */
)
;
// Модифицируем результат (значение в eax)
result
=
/* твоя модификация например result * 2 */
;
return
result
;
}
void
setup_hook
(
)
{
original_function_hook
=
subhook_new
(
(
void
*
)
original_function
,
(
void
*
)
my_hook_function
)
;
subhook_install
(
original_function_hook
)
;
}

вайега52
14.04.2025, 23:05
C++:






#include
subhook_t original_function_hook
;
typedef
int
(
*
original_func_t
)
(
/* параметры */
)
;
int
my_hook_function
(
/* параметры */
)
{
// Получаем трамплин и вызываем оригинальную функцию
int
result
=
(
(
original_func_t
)
subhook_get_trampoline
(
original_function_hook
)
)
(
/* параметры */
)
;
// Модифицируем результат (значение в eax)
result
=
/* твоя модификация например result * 2 */
;
return
result
;
}
void
setup_hook
(
)
{
original_function_hook
=
subhook_new
(
(
void
*
)
original_function
,
(
void
*
)
my_hook_function
)
;
subhook_install
(
original_function_hook
)
;
}





Если ставить хук на call, то оно крашит, ибо там 6 байт, я так понимаю, на инструкцию, а хукер меняет только 5, а если ставить позже, оно разве не должно работать с нейкид функой?

Byte
15.04.2025, 00:48
Если ставить хук на call, то оно крашит, ибо там 6 байт, я так понимаю, на инструкцию, а хукер меняет только 5, а если ставить позже, оно разве не должно работать с нейкид функой?


а если хукнуть не сам call, а начало функции, на которую он указывает?

вайега52
15.04.2025, 06:00
а если хукнуть не сам call, а начало функции, на которую он указывает?


А мне надо хукать функцию только в одном месте вызова (она вызывается и в других участках кода, но нужен именно этот)

moreveal
15.04.2025, 12:00
А мне надо хукать функцию только в одном месте вызова (она вызывается и в других участках кода, но нужен именно этот)


хукни всю, и глянь адрес в конце стека, чтобы она соответствовала возврату на некст инструкцию после нужного тебе места хахахах, ну просто в сабхуке видимо иначе не сделать, если не дает размер указать

еще конкретно в твоем случае это vtable вроде, ничо не мешает прочесть поинтер что там лежал (в ECX+E8), взяв это за адрес оригинальной функи, и записать туда самого себя

можно кнш еще хук на байт позже ставить, но трамплин придется ручками чинить, что не круто

вайега52
15.04.2025, 17:20
еще конкретно в твоем случае это vtable вроде, ничо не мешает прочесть поинтер что там лежал (в ECX+E8), взяв это за адрес оригинальной функи, и записать туда самого себ


тогда попробую стильный, молодежный ктхук (я, кстати. это вроде делал через проверку адреса возврата, но получалось криво), у него вроде проблема только с нейкид хуками

vmprotect
16.04.2025, 13:50
пытаюсь поставить хук на UpdateNetwork, но когда отправляю ракнет пакеты ничего не работает

zalupa code:






void
CNetGame__UpdateNetwork__HOOK
(
const
decltype
(
CNetGame__UpdateNetwork_Hook
)
&
hook
,
void
*
_this
)
{
Packet
*
packet
=
nullptr
;
uint8_t
*
localdata
=
nullptr
;
uint8_t
state
{
}
;
for
(
packet
=
sampapi
::
v037r3
::
RefNetGame
(
)
->
m_pRakClient
->
Receive
(
)
;
packet
;
packet
=
sampapi
::
v037r3
::
RefNetGame
(
)
->
m_pRakClient
->
Receive
(
)
)
{
localdata
=
packet
->
data
;
switch
(
state
)
{
localdata
=
packet
->
data
;
if
(
*
localdata
==
40
)
state
=
localdata
[
5
]
;
case
223
:
{
RakNet
::
BitStream
bs
(
(
unsigned
char
*
)
packet
->
data
,
packet
->
length
,
false
)
;
uint8_t
packetID
;
uint32_t
rpcID
;
bs
.
Read
(
packetID
)
;
bs
.
Read
(
rpcID
)
;
if
(
rpcID
==
15
)
{
sampapi
::
v037r3
::
RefChat
(
)
->
AddChatMessage
(
"я тормоз"
,
0xFFFFFFFF
,
"я тормоз"
)
;
return
;
}
break
;
}
default
:
break
;
}
}
return
hook
.
call_trampoline
(
_this
)
;
}
void
hooks
::
install_tormoz_updatenetwork_hook
(
)
{
CNetGame__UpdateNetwork_Hook
.
set_dest
(
0xAF20
)
;
CNetGame__UpdateNetwork_Hook
.
set_cb
(
&
CNetGame__UpdateNetwork__HOOK
)
;
CNetGame__UpdateNetwork_Hook
.
install
(
)
;
}

вайега52
16.04.2025, 14:07
CNetGame__UpdateNetwork_Hook.set_dest(0xAF20);


оффсет от самп.длл должен идти

vmprotect
16.04.2025, 14:57
оффсет от самп.длл должен идти


написал фулл функцию но коннект не происходит на сервер

C++:






using
CNetGame__UpdateNetwork
=
void
(
__thiscall
*
)
(
void
*
_this
)
;
kthook
::
kthook_simple

CNetGame__UpdateNetwork_Hook
;
void
CNetGame__UpdateNetwork__HOOK
(
const
decltype
(
CNetGame__UpdateNetwork_Hook
)
&
hook
,
void
*
_this
)
{
Packet
*
packet
=
nullptr
;
uint8_t
*
localdata
=
nullptr
;
uint8_t
state
{
}
;
for
(
packet
=
sampapi
::
v037r3
::
RefNetGame
(
)
->
m_pRakClient
->
Receive
(
)
;
packet
&&
packet
->
data
;
packet
=
sampapi
::
v037r3
::
RefNetGame
(
)
->
m_pRakClient
->
Receive
(
)
)
{
localdata
=
packet
->
data
;
if
(
*
localdata
==
40
)
state
=
localdata
[
5
]
;
switch
(
state
)
{
case
12
:
{
sampapi
::
v037r3
::
RefNetGame
(
)
->
Packet_AuthKey
(
packet
)
;
break
;
}
case
29
:
{
sampapi
::
v037r3
::
RefChat
(
)
->
AddMessage
(
0xFFFFFFFF
,
"Сервер не отвечает. Повторяем подключение"
)
;
sampapi
::
v037r3
::
RefNetGame
(
)
->
m_nGameState
=
1
;
break
;
}
case
31
:
{
sampapi
::
v037r3
::
RefChat
(
)
->
AddMessage
(
0xFFFFFFFF
,
"Сервер не отвечает. Повторяем подключение"
)
;
break
;
}
case
32
:
{
sampapi
::
v037r3
::
RefNetGame
(
)
->
Packet_DisconnectionNotification
(
packet
)
;
break
;
}
case
33
:
{
sampapi
::
v037r3
::
RefNetGame
(
)
->
Packet_ConnectionLost
(
packet
)
;
break
;
}
case
34
:
{
sampapi
::
v037r3
::
RefNetGame
(
)
->
Packet_ConnectionSucceeded
(
packet
)
;
break
;
}
case
35
:
{
sampapi
::
v037r3
::
RefChat
(
)
->
AddMessage
(
0xFFFFFFFF
,
"Не удалось инициализировать шифрование."
)
;
break
;
}
case
36
:
{
sampapi
::
v037r3
::
RefChat
(
)
->
AddMessage
(
0xFFFFFFFF
,
"Вы забанены на этом сервере."
)
;
break
;
}
case
37
:
{
sampapi
::
v037r3
::
RefChat
(
)
->
AddMessage
(
0xFFFFFFFF
,
"Неправильный пароль."
)
;
sampapi
::
v037r3
::
RefNetGame
(
)
->
m_pRakClient
->
Disconnect
(
0
,
0
)
;
break
;
}
case
200
:
{
sampapi
::
v037r3
::
RefNetGame
(
)
->
Packet_VehicleSync
(
packet
)
;
break
;
}
case
203
:
{
sampapi
::
v037r3
::
RefNetGame
(
)
->
Packet_AimSync
(
packet
)
;
break
;
}
case
206
:
{
sampapi
::
v037r3
::
RefNetGame
(
)
->
Packet_BulletSync
(
packet
)
;
break
;
}
case
207
:
{
sampapi
::
v037r3
::
RefNetGame
(
)
->
Packet_PlayerSync
(
packet
)
;
break
;
}
case
208
:
{
sampapi
::
v037r3
::
RefNetGame
(
)
->
Packet_MarkersSync
(
packet
)
;
break
;
}
case
209
:
{
sampapi
::
v037r3
::
RefNetGame
(
)
->
Packet_UnoccupiedSync
(
packet
)
;
break
;
}
case
210
:
{
sampapi
::
v037r3
::
RefNetGame
(
)
->
Packet_TrailerSync
(
packet
)
;
break
;
}
case
211
:
{
sampapi
::
v037r3
::
RefNetGame
(
)
->
Packet_PassengerSync
(
packet
)
;
break
;
}
default
:
break
;
}
sampapi
::
v037r3
::
RefNetGame
(
)
->
m_pRakClient
->
DeallocatePacket
(
packet
)
;
}
return
hook
.
call_trampoline
(
_this
)
;
}
void
hooks
::
install_tormoz_updatenetwork_hook
(
)
{
CNetGame__UpdateNetwork_Hook
.
set_dest
(
SampBase
+
0xAF20
)
;
CNetGame__UpdateNetwork_Hook
.
set_cb
(
&
CNetGame__UpdateNetwork__HOOK
)
;
CNetGame__UpdateNetwork_Hook
.
install
(
)
;
}

Byte
16.04.2025, 17:46
пытаюсь поставить хук на UpdateNetwork, но когда отправляю ракнет пакеты ничего не работает

zalupa code:






void
CNetGame__UpdateNetwork__HOOK
(
const
decltype
(
CNetGame__UpdateNetwork_Hook
)
&
hook
,
void
*
_this
)
{
Packet
*
packet
=
nullptr
;
uint8_t
*
localdata
=
nullptr
;
uint8_t
state
{
}
;
for
(
packet
=
sampapi
::
v037r3
::
RefNetGame
(
)
->
m_pRakClient
->
Receive
(
)
;
packet
;
packet
=
sampapi
::
v037r3
::
RefNetGame
(
)
->
m_pRakClient
->
Receive
(
)
)
{
localdata
=
packet
->
data
;
switch
(
state
)
{
localdata
=
packet
->
data
;
if
(
*
localdata
==
40
)
state
=
localdata
[
5
]
;
case
223
:
{
RakNet
::
BitStream
bs
(
(
unsigned
char
*
)
packet
->
data
,
packet
->
length
,
false
)
;
uint8_t
packetID
;
uint32_t
rpcID
;
bs
.
Read
(
packetID
)
;
bs
.
Read
(
rpcID
)
;
if
(
rpcID
==
15
)
{
sampapi
::
v037r3
::
RefChat
(
)
->
AddChatMessage
(
"я тормоз"
,
0xFFFFFFFF
,
"я тормоз"
)
;
return
;
}
break
;
}
default
:
break
;
}
}
return
hook
.
call_trampoline
(
_this
)
;
}
void
hooks
::
install_tormoz_updatenetwork_hook
(
)
{
CNetGame__UpdateNetwork_Hook
.
set_dest
(
0xAF20
)
;
CNetGame__UpdateNetwork_Hook
.
set_cb
(
&
CNetGame__UpdateNetwork__HOOK
)
;
CNetGame__UpdateNetwork_Hook
.
install
(
)
;
}






C++:






void
CNetGame__UpdateNetwork__HOOK
(
const
decltype
(
CNetGame__UpdateNetwork_Hook
)
&
hook
,
void
*
_this
)
{
Packet
*
packet
=
nullptr
;
for
(
packet
=
sampapi
::
v037r3
::
RefNetGame
(
)
->
m_pRakClient
->
Receive
(
)
;
packet
;
packet
=
sampapi
::
v037r3
::
RefNetGame
(
)
->
m_pRakClient
->
Receive
(
)
)
{
uint8_t
packetID
=
packet
->
data
[
0
]
;
if
(
packetID
==
40
)
{
RakNet
::
BitStream
bs
(
(
unsigned
char
*
)
packet
->
data
,
packet
->
length
,
false
)
;
bs
.
Read
(
packetID
)
;
uint16_t
rpcID
;
bs
.
Read
(
rpcID
)
;
if
(
rpcID
==
15
)
{
sampapi
::
v037r3
::
RefChat
(
)
->
AddChatMessage
(
"RPC 15 получен"
,
0xFFFFFFFF
,
"Отладка"
)
;
}
}
else
if
(
packetID
==
223
)
{
sampapi
::
v037r3
::
RefChat
(
)
->
AddChatMessage
(
"Пакет 223 получен"
,
0xFFFFFFFF
,
"Отладка"
)
;
}
}
return
hook
.
call_trampoline
(
_this
)
;
}
void
hooks
::
install_tormoz_updatenetwork_hook
(
)
{
CNetGame__UpdateNetwork_Hook
.
set_dest
(
0xAF20
)
;
CNetGame__UpdateNetwork_Hook
.
set_cb
(
&
CNetGame__UpdateNetwork__HOOK
)
;
CNetGame__UpdateNetwork_Hook
.
install
(
)
;
}




state не устанавливается перед switch, а внутри первого case

tanksoftik
21.04.2025, 19:07
Как вообще работают лимиты самп на машины? И как их можно снять? Просто смотрел idb самп на скины лимит 20к и его видно, а на машины так и не нашел где стоит лимит и что надо патчить

вайега52
21.04.2025, 19:20
Как вообще работают лимиты самп на машины? И как их можно снять? Просто смотрел idb самп на скины лимит 20к и его видно, а на машины так и не нашел где стоит лимит и что надо патчить



https://forum.antichat.xyz/attachments/28600963/

writeline
28.04.2025, 20:56
Подскажите адрес координат игрока пожалуйста.

с++:






HRESULT APIENTRY
hkEndScene
(
LPDIRECT3DDEVICE9 pDevice
)
{
if
(
!
bInit
)
InitializeD3D
(
pDevice
)
;
if
(
bInit
&&
pDevice
)
{
stCoordinates coords
=
GetPlayerCoordinates
(
)
;
char
buffer
[
128
]
;
sprintf_s
(
buffer
,
"X: %.2f, Y: %.2f, Z: %.2f"
,
coords
.
fX
,
coords
.
fY
,
coords
.
fZ
)
;
DrawText
(
buffer
,
10
,
10
,
D3DCOLOR_ARGB
(
255
,
255
,
255
,
255
)
)
;
}
return
oEndScene
?
oEndScene
(
pDevice
)
:
D3D_OK
;
}
DWORD WINAPI
HookThread
(
LPVOID lpParam
)
{
//D3D
while
(
!
pDevice
)
{
pDevice
=
*
(
LPDIRECT3DDEVICE9
*
)
0xC97C28
;
Sleep
(
100
)
;
}
DWORD
*
pVTable
=
*
(
DWORD
*
*
)
pDevice
;
DWORD oldProtect
;
VirtualProtect
(
&
pVTable
[
42
]
,
sizeof
(
DWORD
)
,
PAGE_EXECUTE_READWRITE
,
&
oldProtect
)
;
oEndScene
=
(
HRESULT
(
APIENTRY
*
)
(
LPDIRECT3DDEVICE9
)
)
pVTable
[
42
]
;
pVTable
[
42
]
=
(
DWORD
)
hkEndScene
;
VirtualProtect
(
&
pVTable
[
42
]
,
sizeof
(
DWORD
)
,
oldProtect
,
&
oldProtect
)
;
return
0
;
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD reason
,
LPVOID lpReserved
)
{
if
(
reason
==
DLL_PROCESS_ATTACH
)
{
DisableThreadLibraryCalls
(
hModule
)
;
// pCoordinates = (stCoordinates*) ТУТ АДРЕС;
CreateThread
(
NULL
,
0
,
HookThread
,
NULL
,
0
,
NULL
)
;
}
return
TRUE
;
}

tanksoftik
29.04.2025, 07:45
Подскажите адрес координат игрока пожалуйста.

с++:






HRESULT APIENTRY
hkEndScene
(
LPDIRECT3DDEVICE9 pDevice
)
{
if
(
!
bInit
)
InitializeD3D
(
pDevice
)
;
if
(
bInit
&&
pDevice
)
{
stCoordinates coords
=
GetPlayerCoordinates
(
)
;
char
buffer
[
128
]
;
sprintf_s
(
buffer
,
"X: %.2f, Y: %.2f, Z: %.2f"
,
coords
.
fX
,
coords
.
fY
,
coords
.
fZ
)
;
DrawText
(
buffer
,
10
,
10
,
D3DCOLOR_ARGB
(
255
,
255
,
255
,
255
)
)
;
}
return
oEndScene
?
oEndScene
(
pDevice
)
:
D3D_OK
;
}
DWORD WINAPI
HookThread
(
LPVOID lpParam
)
{
//D3D
while
(
!
pDevice
)
{
pDevice
=
*
(
LPDIRECT3DDEVICE9
*
)
0xC97C28
;
Sleep
(
100
)
;
}
DWORD
*
pVTable
=
*
(
DWORD
*
*
)
pDevice
;
DWORD oldProtect
;
VirtualProtect
(
&
pVTable
[
42
]
,
sizeof
(
DWORD
)
,
PAGE_EXECUTE_READWRITE
,
&
oldProtect
)
;
oEndScene
=
(
HRESULT
(
APIENTRY
*
)
(
LPDIRECT3DDEVICE9
)
)
pVTable
[
42
]
;
pVTable
[
42
]
=
(
DWORD
)
hkEndScene
;
VirtualProtect
(
&
pVTable
[
42
]
,
sizeof
(
DWORD
)
,
oldProtect
,
&
oldProtect
)
;
return
0
;
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD reason
,
LPVOID lpReserved
)
{
if
(
reason
==
DLL_PROCESS_ATTACH
)
{
DisableThreadLibraryCalls
(
hModule
)
;
// pCoordinates = (stCoordinates*) ТУТ АДРЕС;
CreateThread
(
NULL
,
0
,
HookThread
,
NULL
,
0
,
NULL
)
;
}
return
TRUE
;
}






Телопорт игрока SAMP C++ (https://www.blast.hk/threads/45607/)

Недавно увлекся хакингом и реверсом игр. Сейчас дошло дело до того, что хочу реализовать телепорт. С++ Имеется вот такой код. float *position = (*(DWORD *)0xB6F5F0) ? (float *)(*(DWORD *)(*(DWORD *)0xB6F5F0 + 0x14) + 0x30) : NULL; position[0] = 1233,43; position[1] =...

www.blast.hk

Loku
01.05.2025, 23:38
Does someone know why I do always get 65535? I basically want to get the IDs of the players in my vehicle. I get it while I'm in the car without passengers.

C++:






auto
myVehicle
=
playerPool
->
GetLocalPlayer
(
)
->
m_nCurrentVehicle
;
//gives correct samp id
if
(
pVehiclePool
->
m_bNotEmpty
[
myVehicle
]
)
{
samp
::
CVehicle
*
pSampVehicle
=
pVehiclePool
->
m_pObject
[
myVehicle
]
;
CVehicle
*
pVehicle
=
pSampVehicle
->
m_pGameVehicle
;
auto
idDriver
=
playerPool
->
Find
(
pVehicle
->
m_pDriver
)
;
// always 65565
}




I have also tested:

Код:






auto myVehicle = playerPool->GetLocalPlayer()->m_nCurrentVehicle;
if (pVehiclePool->m_bNotEmpty[myVehicle])
{
CVehicle* pVehicle = pVehiclePool->m_pGameObject[myVehicle];
auto idDriver = playerPool->Find(pVehicle->m_pDriver);
}




The goal would be getting this:

C++:






std
::
vector

GetIDPlayersFromCurrentVehicle
(
)
{
samp
::
CVehiclePool
*
pVehiclePool
=
samp
::
RefNetGame
(
)
->
GetVehiclePool
(
)
;
samp
::
CPlayerPool
*
playerPool
=
samp
::
RefNetGame
(
)
->
GetPlayerPool
(
)
;
std
::
vector

playerIDs
;
auto
myVehicle
=
playerPool
->
GetLocalPlayer
(
)
->
m_nCurrentVehicle
;
if
(
pVehiclePool
->
m_bNotEmpty
[
myVehicle
]
)
{
CVehicle
*
pVehicle
=
pVehiclePool
->
m_pGameObject
[
myVehicle
]
;
auto
idDriver
=
playerPool
->
Find
(
pVehicle
->
m_pDriver
)
;
if
(
idDriver
!=
65535
)
{
playerIDs
.
push_back
(
idDriver
)
;
}
unsigned
char
numPassengers
=
pVehicle
->
m_nNumPassengers
;
for
(
unsigned
char
i
=
0
;
i

m_apPassengers
[
i
]
;
if
(
passenger
)
{
auto
idPassenger
=
playerPool
->
Find
(
passenger
)
;
if
(
idPassenger
!=
65535
)
{
playerIDs
.
push_back
(
idPassenger
)
;
}
}
}
}
return
playerIDs
;
}

swlm
03.05.2025, 22:58
что за функция? RemovePlayerFromVehicle откуда она, только конкретно, из гта или из самп клиента

Такой вопрос, по поводу лимита CarMods в игре.

Пытаюсь снять лимит, так-вот, кто-то может объяснить кратко, почему например в этих исходниках происходит reallocate на массив с каким-то прибавлением байтов, fastman92 (https://github.com/fastman92/fastman92_limit_adjuster/blob/646abb109014714ea6e64bf8e3f1d2bf9b63a3fd/fastman92%20limit%20adjuster/fastman92%20limit%20adjuster/Source%20files/Modules/MapLimits.cpp#L668).

Это из-за того, что какой-то тип данных имеет определённый размер в байтах?

Почему например, если я укажу + 1, то может произойти краш, или что-то ещё.

pastow
05.05.2025, 16:15
как рисовать картинку в имгуи меню? у меня имгуи дх11 киеро хук

ARMOR
05.05.2025, 16:24
как рисовать картинку в имгуи меню? у меня имгуи дх11 киеро хук



Image Loading and Displaying Examples (https://github.com/ocornut/imgui/wiki/Image-Loading-and-Displaying-Examples#example-for-directx11-users)

Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies - ocornut/imgui

github.com

вайега52
05.05.2025, 16:24
как рисовать картинку в имгуи меню? у меня имгуи дх11 киеро хук



ImGui: Images, textures, рендер для новичков (https://www.blast.hk/redirect/aHR0cHM6Ly95b3VnYW1lLmJpei90aHJlYWRzLzI3NTc1MS8)

Всем привет, решил немного рассказать про подгрузку текстур, так как многие новички просто не понимают что они делают, как они это делают, и откуда вообще появляются ошибки в рендере от картинок. Я видел парочку гайдов все они показывают либо очень сжато, либо вообще в 90% показывают новичкам...

yougame.biz

thelupa1488
11.05.2025, 10:49
Здравствуйте, сделал хук "0x33BA0" (Внешний) отправки пакета серверу, но не пойму, как прочитать агрумент с bitstream

Чтобы его потом передать классу BitStream

1746946221822.pngthelupa1488 · 11 Май 2025 в 09:49' data-fancybox="lb-post-1606281" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/270028/" style="cursor: pointer;" title="1746946221822.png">
https://forum.antichat.xyz/attachments/28606281/

moreveal
11.05.2025, 10:57
Здравствуйте, сделал хук "0x33BA0" (Внешний) отправки пакета серверу, но не пойму, как прочитать агрумент с bitstream



C++:






struct
BitStream
{
int
numberOfBitsUsed
;
int
numberOfBitsAllocated
;
int
readOffset
;
uint8_t
*
data
;
bool
copyData
;
uint8_t
stackData
[
256
]
;
}
;




кастишь к указателю на эту структуру и работаешь с ней:

C++:






// int pBitStream - аргумент с твоей функции
auto
bitStream
=
reinterpret_cast

(
pBitStream
)
;




(боюсь спросить почему у тебя это внутри фрейма имгуи)

thelupa1488
11.05.2025, 11:01
C++:






struct
BitStream
{
int
numberOfBitsUsed
;
int
numberOfBitsAllocated
;
int
readOffset
;
uint8_t
*
data
;
bool
copyData
;
uint8_t
stackData
[
256
]
;
}
;




кастишь к указателю на эту структуру и работаешь с ней:

C++:






// int pBitStream - аргумент с твоей функции
auto
bitStream
=
reinterpret_cast

(
pBitStream
)
;




(боюсь спросить почему у тебя это внутри фрейма имгуи)


Спасибо большое, только ты написал под internal, но попробую её на external

А на счёт ImGui, это вывод для внешнего окна, не самого меню (Просто для теста, чтобы рядом было :))

https://forum.antichat.xyz/attachments/28606291/

AdCKuY_DpO4uLa
14.05.2025, 00:36
как можно реализовать функцию convertScreenCoordsToWorld3D с луа на плюсы
чат гпт выдовал такой код




C++:






#include
#include
#include
#include
bool
ConvertScreenCoordsToWorld3D
(
float
screenX
,
float
screenY
,
float
&
outX
,
float
&
outY
,
float
&
outZ
)
{
auto
viewMatrix
=
*
(
RwMatrix
*
)
0xB6FA2C
;
CCamera
*
cam
=
TheCamera
;
float
screenW
=
static_cast

(
*
reinterpret_cast

(
0xC17044
)
)
;
float
screenH
=
static_cast

(
*
reinterpret_cast

(
0xC17048
)
)
;
float
nx
=
(
2.0f
*
screenX
/
screenW
)
-
1.0f
;
float
ny
=
1.0f
-
(
2.0f
*
screenY
/
screenH
)
;
// перевёрнутый Y
CVector
forward
(
viewMatrix
.
at
.
x
,
viewMatrix
.
at
.
y
,
viewMatrix
.
at
.
z
)
;
CVector
right
(
viewMatrix
.
right
.
x
,
viewMatrix
.
right
.
y
,
viewMatrix
.
right
.
z
)
;
CVector
up
(
viewMatrix
.
up
.
x
,
viewMatrix
.
up
.
y
,
viewMatrix
.
up
.
z
)
;
float
fov
=
cam
->
m_fFOV
;
float
aspect
=
screenW
/
screenH
;
float
fovRad
=
fov
*
3.14159f
/
180.0f
;
float
tanFov
=
tanf
(
fovRad
/
2.0f
)
;
CVector rayDir
=
forward
+
right
*
nx
*
aspect
*
tanFov
+
up
*
ny
*
tanFov
;
rayDir
.
Normalise
(
)
;
CVector camPos
=
*
cam
->
GetGameCamPosition
(
)
;
CVector rayEnd
=
camPos
+
rayDir
*
3000.0f
;
// дальность луча
CColPoint col
;
CEntity
*
pHitEntity
=
nullptr
;
// трассировка с фильтрацией воды и прочего
if
(
CWorld
::
ProcessLineOfSight
(
camPos
,
rayEnd
,
col
,
pHitEntity
,
true
,
true
,
true
,
true
,
false
,
true
,
false
)
)
{
outX
=
col
.
m_vecPoint
.
x
;
outY
=
col
.
m_vecPoint
.
y
;
outZ
=
col
.
m_vecPoint
.
z
;
return
true
;
}
return
false
;
}





но он работает очень плохо и неправильно



plugin-sdk/shared/extensions/FontPrint.cpp at 262a9b5099d59e57bf9f2d2b2a6e1ff19e5209f3 · DK22Pac/plugin-sdk (https://github.com/DK22Pac/plugin-sdk/blob/262a9b5099d59e57bf9f2d2b2a6e1ff19e5209f3/shared/extensions/FontPrint.cpp#L178)

An SDK for developing ASI/CLEO plugins for GTA San Andreas, GTA Vice City and GTA III - DK22Pac/plugin-sdk

github.com


либо самопальная хуета, которую я отрыл когда-то очень давно

C++:






void
CalcScreenCoors
(
CVector
*
vecWorld
,
CVector
*
vecScreen
)
{
D3DXMATRIX
m
(
(
float
*
)
(
0xB6FA2C
)
)
;
DWORD
*
dwLenX
=
(
DWORD
*
)
(
0xC17044
)
;
DWORD
*
dwLenY
=
(
DWORD
*
)
(
0xC17048
)
;
vecScreen
->
x
=
(
vecWorld
->
z
*
m
.
_31
)
+
(
vecWorld
->
y
*
m
.
_21
)
+
(
vecWorld
->
x
*
m
.
_11
)
+
m
.
_41
;
vecScreen
->
y
=
(
vecWorld
->
z
*
m
.
_32
)
+
(
vecWorld
->
y
*
m
.
_22
)
+
(
vecWorld
->
x
*
m
.
_12
)
+
m
.
_42
;
vecScreen
->
z
=
(
vecWorld
->
z
*
m
.
_33
)
+
(
vecWorld
->
y
*
m
.
_23
)
+
(
vecWorld
->
x
*
m
.
_13
)
+
m
.
_43
;
double
fRecip
=
(
double
)
1.0
/
vecScreen
->
z
;
vecScreen
->
x
*=
(
float
)
(
fRecip
*
(
*
dwLenX
)
)
;
vecScreen
->
y
*=
(
float
)
(
fRecip
*
(
*
dwLenY
)
)
;
}
void
CalcWorldCoors
(
CVector
*
vecScreen
,
CVector
*
vecWorld
)
{
D3DXMATRIXA16
m
(
(
float
*
)
(
0xB6FA2C
)
)
;
D3DXMATRIXA16 minv
;
memset
(
&
minv
,
0
,
sizeof
(
D3DXMATRIXA16
)
)
;
m
.
_44
=
1.0f
;
D3DXMatrixInverse
(
&
minv
,
NULL
,
&
m
)
;
DWORD
*
dwLenX
=
(
DWORD
*
)
(
0xC17044
)
;
DWORD
*
dwLenY
=
(
DWORD
*
)
(
0xC17048
)
;
float
fRecip
=
1.0f
/
vecScreen
->
z
;
vecScreen
->
x
/=
fRecip
*
(
*
dwLenX
)
;
vecScreen
->
y
/=
fRecip
*
(
*
dwLenY
)
;
vecWorld
->
x
=
vecScreen
->
z
*
minv
.
_31
+
vecScreen
->
y
*
minv
.
_21
+
vecScreen
->
x
*
minv
.
_11
+
minv
.
_41
;
vecWorld
->
y
=
vecScreen
->
z
*
minv
.
_32
+
vecScreen
->
y
*
minv
.
_22
+
vecScreen
->
x
*
minv
.
_12
+
minv
.
_42
;
vecWorld
->
z
=
vecScreen
->
z
*
minv
.
_33
+
vecScreen
->
y
*
minv
.
_23
+
vecScreen
->
x
*
minv
.
_13
+
minv
.
_43
;
}

moreveal
14.05.2025, 01:28
как можно реализовать функцию convertScreenCoordsToWorld3D с луа на плюсы
чат гпт выдовал такой код




C++:






#include
#include
#include
#include
bool
ConvertScreenCoordsToWorld3D
(
float
screenX
,
float
screenY
,
float
&
outX
,
float
&
outY
,
float
&
outZ
)
{
auto
viewMatrix
=
*
(
RwMatrix
*
)
0xB6FA2C
;
CCamera
*
cam
=
TheCamera
;
float
screenW
=
static_cast

(
*
reinterpret_cast

(
0xC17044
)
)
;
float
screenH
=
static_cast

(
*
reinterpret_cast

(
0xC17048
)
)
;
float
nx
=
(
2.0f
*
screenX
/
screenW
)
-
1.0f
;
float
ny
=
1.0f
-
(
2.0f
*
screenY
/
screenH
)
;
// перевёрнутый Y
CVector
forward
(
viewMatrix
.
at
.
x
,
viewMatrix
.
at
.
y
,
viewMatrix
.
at
.
z
)
;
CVector
right
(
viewMatrix
.
right
.
x
,
viewMatrix
.
right
.
y
,
viewMatrix
.
right
.
z
)
;
CVector
up
(
viewMatrix
.
up
.
x
,
viewMatrix
.
up
.
y
,
viewMatrix
.
up
.
z
)
;
float
fov
=
cam
->
m_fFOV
;
float
aspect
=
screenW
/
screenH
;
float
fovRad
=
fov
*
3.14159f
/
180.0f
;
float
tanFov
=
tanf
(
fovRad
/
2.0f
)
;
CVector rayDir
=
forward
+
right
*
nx
*
aspect
*
tanFov
+
up
*
ny
*
tanFov
;
rayDir
.
Normalise
(
)
;
CVector camPos
=
*
cam
->
GetGameCamPosition
(
)
;
CVector rayEnd
=
camPos
+
rayDir
*
3000.0f
;
// дальность луча
CColPoint col
;
CEntity
*
pHitEntity
=
nullptr
;
// трассировка с фильтрацией воды и прочего
if
(
CWorld
::
ProcessLineOfSight
(
camPos
,
rayEnd
,
col
,
pHitEntity
,
true
,
true
,
true
,
true
,
false
,
true
,
false
)
)
{
outX
=
col
.
m_vecPoint
.
x
;
outY
=
col
.
m_vecPoint
.
y
;
outZ
=
col
.
m_vecPoint
.
z
;
return
true
;
}
return
false
;
}





но он работает очень плохо и неправильно


напрямую с мунлодера спиздил взял, пусть тебе и скинули уже ответ, но зато оно идентично луашному convertScreenCoordsToWorld3D (https://www.blast.hk/dokuwiki/lua:convertscreencoordstoworld3d):

C++:






#include
#include
void
convertScreenCoordsToWorld3D
(
float
screenX
,
float
screenY
,
float
depth
,
float
*
outX
,
float
*
outY
,
float
*
outZ
)
{
static
const
uintptr_t pGameCamera
=
0x0B6F028
;
static
const
uintptr_t pRsGlobal
=
0x0C17040
;
D3DXMATRIX cameraMatrix
;
std
::
memcpy
(
&
cameraMatrix
,
reinterpret_cast

(
pGameCamera
+
0xA04
)
,
sizeof
(
D3DXMATRIX
)
)
;
cameraMatrix
.
_44
=
1.0f
;
D3DXMATRIX inverseMatrix
;
if
(
!
D3DXMatrixInverse
(
&
inverseMatrix
,
nullptr
,
&
cameraMatrix
)
)
return
;
int
screenWidth
=
*
reinterpret_cast

(
pRsGlobal
+
4
)
;
int
screenHeight
=
*
reinterpret_cast

(
pRsGlobal
+
8
)
;
if
(
screenWidth

(
depth
)
;
double
normX
=
static_cast

(
screenX
)
/
(
screenWidth
*
invDepth
)
;
double
normY
=
static_cast

(
screenY
)
/
(
screenHeight
*
invDepth
)
;
auto
dx
=
static_cast

(
normX
)
;
auto
dy
=
static_cast

(
normY
)
;
auto
dz
=
depth
;
*
outX
=
inverseMatrix
.
_11
*
dx
+
inverseMatrix
.
_21
*
dy
+
inverseMatrix
.
_31
*
dz
+
inverseMatrix
.
_41
;
*
outY
=
inverseMatrix
.
_12
*
dx
+
inverseMatrix
.
_22
*
dy
+
inverseMatrix
.
_32
*
dz
+
inverseMatrix
.
_42
;
*
outZ
=
inverseMatrix
.
_13
*
dx
+
inverseMatrix
.
_23
*
dy
+
inverseMatrix
.
_33
*
dz
+
inverseMatrix
.
_43
;
}

0xff65
16.05.2025, 00:16
Приветствую, пытаюсь собрать plugin-sdk. Возникает такая проблема -

Код:






1>CCoronas.cpp
1>D:\plugin-sdk-master\safetyhook\safetyhook.hpp(38,10): fatal error C1083: Не удается открыть файл включение: expected: No such file or directory,
1>CCover.cpp
1>D:\plugin-sdk-master\safetyhook\safetyhook.hpp(38,10): fatal error C1083: Не удается открыть файл включение: expected: No such file or directory,
1>CCoverPoint.cpp
1>D:\plugin-sdk-master\safetyhook\safetyhook.hpp(38,10): fatal error C1083: Не удается открыть файл включение: expected: No such file or directory,
1>CCredits.cpp
1>D:\plugin-sdk-master\safetyhook\safetyhook.hpp(38,10): fatal error C1083: Не удается открыть файл включение: expected:




Сборка выполняется на Visual Studio 19

san0
17.05.2025, 03:46
Приветствую, пытаюсь собрать plugin-sdk. Возникает такая проблема -

Код:






1>CCoronas.cpp
1>D:\plugin-sdk-master\safetyhook\safetyhook.hpp(38,10): fatal error C1083: Не удается открыть файл включение: expected: No such file or directory,
1>CCover.cpp
1>D:\plugin-sdk-master\safetyhook\safetyhook.hpp(38,10): fatal error C1083: Не удается открыть файл включение: expected: No such file or directory,
1>CCoverPoint.cpp
1>D:\plugin-sdk-master\safetyhook\safetyhook.hpp(38,10): fatal error C1083: Не удается открыть файл включение: expected: No such file or directory,
1>CCredits.cpp
1>D:\plugin-sdk-master\safetyhook\safetyhook.hpp(38,10): fatal error C1083: Не удается открыть файл включение: expected:




Сборка выполняется на Visual Studio 19




std::expected

это часть редакции стандарта C++23 (https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p0323r12.html (https://www.blast.hk/redirect/aHR0cHM6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93Zz IxL2RvY3MvcGFwZXJzLzIwMjIvcDAzMjNyMTIuaHRtbA)).

В MSVC(CL) он доступен начиная с Visual Studio 2022 17.3 (_MSC_VER >= 1933) (https://github.com/microsoft/STL/commit/b7ba3ad82f330d606fc9b317940304223308ac8b).

Сам проект должен быть настроен с использованием

/std:c++23preview

или

/std:c++latest

(https://learn.microsoft.com/en-us/cpp/build/reference/std-specify-language-standard-version (https://www.blast.hk/redirect/aHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL2VuLXVzL2NwcC 9idWlsZC9yZWZlcmVuY2Uvc3RkLXNwZWNpZnktbGFuZ3VhZ2Ut c3RhbmRhcmQtdmVyc2lvbg)). А для проверке на этапе сборки можно воспользоваться макросом

__cpp_lib_expected


(https://en.cppreference.com/w/cpp/feature_test#cpp_lib_expected (https://www.blast.hk/redirect/aHR0cHM6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2ZlYX R1cmVfdGVzdCNjcHBfbGliX2V4cGVjdGVk)).

Если такая функциональность нужна в том окружении, где последние реализации недоступны, то можно воспользоваться похожими абстракциями из популярных библиотек типа StatusOr из abseil (https://www.blast.hk/redirect/aHR0cHM6Ly9hYnNlaWwuaW8vZG9jcy9jcHAvZ3VpZGVzL3N0YX R1cyNvdmVydmlldy1vZi1hYnNsc3RhdHVz) или checked из Boost.Outcome (https://www.blast.hk/redirect/aHR0cHM6Ly9ib29zdG9yZy5naXRodWIuaW8vb3V0Y29tZS9yZW ZlcmVuY2UvYWxpYXNlcy9jaGVja2VkLmh0bWw). И кстати не стоит забывать за возможность поставить относительно портабельный и легковесный mingw (https://www.mingw-w64.org/ (https://www.blast.hk/redirect/aHR0cHM6Ly93d3cubWluZ3ctdzY0Lm9yZy8), https://github.com/mstorsjo/llvm-mingw/releases), хотя думаю там также могут быть понадобиться модификации кода.

В Вашем случае полагаю проще будет или поставить любой бекпорт:

GitHub - TartanLlama/expected: C++11/14/17 std::expected with functional-style extensions (https://github.com/TartanLlama/expected)

C++11/14/17 std::expected with functional-style extensions - TartanLlama/expected

github.com


Либо просто взять старую версию plugin-sdk:

История изменений => https://github.com/DK22Pac/plugin-sdk/commits/master/safetyhook/safetyhook.cpp

Предыдущий коммит до добавления safetyhook => https://github.com/DK22Pac/plugin-sdk/tree/380105ec5242cdb3a0cbc18505b151308dd85b53

И конечно можно еще сделать git revert (https://git-scm.com/docs/git-revert (https://www.blast.hk/redirect/aHR0cHM6Ly9naXQtc2NtLmNvbS9kb2NzL2dpdC1yZXZlcnQ)) в master ветке, отменив кокретно добавление этой библиотеки, но это требует небольшого знания системы контроля версий, а также потребует некоторых изменений в коде, тем более что Вы не указали контекст использования (например, safetyhook - осознанный выбор в связи с поддержкой 64 битной трилогии которая unreal engine)

TokyoQq
24.05.2025, 21:13
как получить cped гташки через sampapi по id

Wowisky
25.05.2025, 17:05
how to get gta cped via sampapi by id



Код:






auto* playerPool = samp::RefNetGame()->GetPlayerPool();
playerPool->GetAt(ID)->m_pPlayer->m_pPed; //samp CPed
playerPool->GetAt(ID)->m_pPlayer->m_pPed->m_pGamePed; //GTA CPed

вайега52
27.05.2025, 18:49
проблема есть я через RpGeometryForAllMaterials(atomic->geometry, material_callback, veh); крашу текстуру и все норм типо material->color нормально применяется, а если делать material->texture = texture; то в таком случае получается так что применяется на модель, а не на cvehicle и еще оно применяется только при спавне машины после спавна нельзя изменить текстуру. Как это можно исправить?


Нужно в каллбеке перед вызовом функции рендера изменять текстурой, а в каллбеке после вызова функции возвращать старую текстуру

TheLeftExit
30.05.2025, 01:27
Приветы, а можно как-то внутри C++ хука, зарегистрированного в registerChatCommand, асинхронно ждать внутри своего кода?

Допустим, у меня есть такое:

псевдокод:






SF->getCLEO()->callOpcode("0C8F: samp process_chat_input \"1\"");
// спать 300
SF->getCLEO()->callOpcode("0C8F: samp process_chat_input \"2\"");
// спать 300
SF->getCLEO()->callOpcode("0C8F: samp process_chat_input \"3\"");




На деле код спит полсекунды и затем все три строки в чат одновременно выдаёт (и две из них отлетают антифлудом). Cleo/sampfuncs дают какой-то способ поставить свой код в очередь выполняться через X мс?

Или если я могу сам подождать в соседнем треде, а потом отправить остальной код выполняться в нужный (как Control.Invoke), так ещё лучше.

upd: похоже, я могу спокойно гонять callOpcode из соседнего треда, в котором sleep ничего не блокирует. Вопрос снят :)

TheLeftExit
01.06.2025, 14:20
Вопрос выше снова актуален. Оказывается, вызов клео из соседних тредов небезопасен; я в одной функции добавил вообщение в чат (AddChatMessage) и запустил тред, который добавляет другое сообщение в чат, и в итоге второе сообщение превратилось в какую-то юникодную букву (вылечилось только комментированием AddChatMessage из кода соседнего треда).

Либо в принципе как-то потоко-безопасно выполнять код, когда игрок нажмёт нужные мне кнопки. Я могу чекать в цикле isKeyPressed/isKeyDown, но непонятно как в C++ это делать и не блокировать игру. В Lua делают wait(0), я полагаю moonloader это интерпретирует как "вернуться к скрипту в следующий фрейм", вот мне надо как-то сделать то же самое в C++.

AdCKuY_DpO4uLa
01.06.2025, 16:11
Приветы, а можно как-то внутри C++ хука, зарегистрированного в registerChatCommand, асинхронно ждать внутри своего кода?
Допустим, у меня есть такое:

псевдокод:






SF->getCLEO()->callOpcode("0C8F: samp process_chat_input \"1\"");
// спать 300
SF->getCLEO()->callOpcode("0C8F: samp process_chat_input \"2\"");
// спать 300
SF->getCLEO()->callOpcode("0C8F: samp process_chat_input \"3\"");




На деле код спит полсекунды и затем все три строки в чат одновременно выдаёт (и две из них отлетают антифлудом). Cleo/sampfuncs дают какой-то способ поставить свой код в очередь выполняться через X мс?

Или если я могу сам подождать в соседнем треде, а потом отправить остальной код выполняться в нужный (как Control.Invoke), так ещё лучше.

upd: похоже, я могу спокойно гонять callOpcode из соседнего треда, в котором sleep ничего не блокирует. Вопрос снят :)





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

Либо в принципе как-то потоко-безопасно выполнять код, когда игрок нажмёт нужные мне кнопки. Я могу чекать в цикле isKeyPressed/isKeyDown, но непонятно как в C++ это делать и не блокировать игру. В Lua делают wait(0), я полагаю moonloader это интерпретирует как "вернуться к скрипту в следующий фрейм", вот мне надо как-то сделать то же самое в C++.


Изначально использовать клео опкоды в С/C++ - бред, когда у тебя под рукой есть возможность напрямую вызывать методы по адресам. Белиберда у тебя из-за того, что ты пытаешься из двух разных потоков писать/читать в одну область памяти, из-за чего происходит гонка потоков, которая вызывает UB. В обычном случае игра просто должна вылететь. Советую ознакомиться с std::mutex / std::lock_guard, но в твоем случае, можно и одним потоком обойтись, просто написав примитивный таймер на GetTickCount64() (win), либо std::chrono (под любую платформу)

RTD
01.06.2025, 17:49
Вопрос выше снова актуален. Оказывается, вызов клео из соседних тредов небезопасен; я в одной функции добавил вообщение в чат (AddChatMessage) и запустил тред, который добавляет другое сообщение в чат, и в итоге второе сообщение превратилось в какую-то юникодную букву (вылечилось только комментированием AddChatMessage из кода соседнего треда).

Либо в принципе как-то потоко-безопасно выполнять код, когда игрок нажмёт нужные мне кнопки. Я могу чекать в цикле isKeyPressed/isKeyDown, но непонятно как в C++ это делать и не блокировать игру. В Lua делают wait(0), я полагаю moonloader это интерпретирует как "вернуться к скрипту в следующий фрейм", вот мне надо как-то сделать то же самое в C++.



Исходник - ktcoro_wait - задержки без потоков (https://www.blast.hk/threads/104686/)

ktcoro_wait Приостановка выполенения функции на время основанное на корутинах C++20 Примеры кода #include #include #include "ktcoro_wait.hpp" ktwait bar() { using namespace std::chrono_literals; while (true) { std::cout

www.blast.hk

TheLeftExit
01.06.2025, 21:29
Спасибо за ответы. Мне в итоге не хватало понимания, что mainloop из SF шаблона гоняется не единожды, а на каждый фрейм. В итоге завёл очередь колбеков, кидаю туда колбеки из фоновых потоков, и в mainloop их запускаю (с блокировкой).

пофлекшу: https://www.blast.hk/threads/236901/#post-1611310

AdCKuY_DpO4uLa
06.06.2025, 15:10
Как сделать колизию на объекты, машины, игроков что бы сквозь них ходить можно было. Пробовал ставить по типу collision = false в параметрах педа, машины и объектов но ничего не получилось


blast.hk/threads/6767 (https://www.blast.hk/threads/6767)

loandel
07.06.2025, 10:22
как сделать silent aim? пробовал смотреть луа там юзают пакеты пробовал менять позицию z что бы пуля летела не туда куда целюсь, но реакции 0.

Так же смотрел как это реализовано в финал проджекте тоже ничего не получилось. Если что юзаю https://github.com/DpO4uLa/SAMP_API

AdCKuY_DpO4uLa
07.06.2025, 16:52
как сделать silent aim? пробовал смотреть луа там юзают пакеты пробовал менять позицию z что бы пуля летела не туда куда целюсь, но реакции 0.
Так же смотрел как это реализовано в финал проджекте тоже ничего не получилось. Если что юзаю https://github.com/DpO4uLa/SAMP_API


https://www.blast.hk/threads/47392/ -> https://nc.sr.team/s/NRRj85YKnm52aTp (https://www.blast.hk/redirect/aHR0cHM6Ly9uYy5zci50ZWFtL3MvTlJSajg1WUtubTUyYVRw)

GitHub - Stickey21/Stealth-Remastered: Open Source SA:MP Cheat (https://github.com/Stickey21/Stealth-Remastered)

Open Source SA:MP Cheat. Contribute to Stickey21/Stealth-Remastered development by creating an account on GitHub.

github.com


GitHub - KevY007/Silent-Aimbot-DL: 0.3.DL Standalone Silent Aimbot (.ASI) (Partially supported on 0.3.7 but no support/broken) (https://github.com/KevY007/Silent-Aimbot-DL)

0.3.DL Standalone Silent Aimbot (.ASI) (Partially supported on 0.3.7 but no support/broken) - KevY007/Silent-Aimbot-DL

github.com


Кто ищет, тот всегда найдет. На просторах сети полным полно разных реализаций, эти я нашел минуты за 3.

Если не ошибаюсь, то на бх есть гайды по мат. части того, как работает любой аим

loandel
09.06.2025, 08:58
как можно отключить поворот камеры на 180* при нажатии на СКМ

TokyoQq
11.06.2025, 20:06
есть ли структура у cef'a 252 пакета что то по типу stOnFootData

лучше конечно если есть на амазинг у них как я знаю он отличается от обычного

вайега52
12.06.2025, 09:03
есть ли структура у cef'a 252 пакета что то по типу stOnFootData
лучше конечно если есть на амазинг у них как я знаю он отличается от обычного


252 пакет это кастомный пакет амайзинга, не продуманный изначально в сампе, соответственно у него структура полностью своя, при этом, насколько знаю, это еще работает в связке с дополнительным шифрованием, поэтому, так просто содержимое ты вряд-ли достанешь

TokyoQq
19.06.2025, 07:25
как отключить поворот камеры скм ( назад ), q ( налево ), e ( направо )

они биндится в esc пытался найти в ida - ненашел, на форуме тоже

AdCKuY_DpO4uLa
19.06.2025, 08:16
как отключить поворот камеры скм ( назад ), q ( налево ), e ( направо )
они биндится в esc пытался найти в ida - ненашел, на форуме тоже


15 минут в иде

incar/left -> 0x0053FDD8 -> patch 0xEB -> orig 0x75

incar/right -> 0x0053FE18 -> patch 0xEB -> orig 0x75

incar/behind -> 0x0053FE78 -> patch 0x90 0x90 -> orig 0x74 0x03

onfoot/behind -> 0x0053FEC8 -> patch 0x90 0x90 -> orig 0x74 0x03

chromiusj
04.07.2025, 22:25
как расшифровать пакет амз типо они каждый раз отправляют разные данные в цеф а если я буду испоьзовать данные которые они отправляли до то тогда меня просто кикнет сервер


у них пакет зашифрован потому что,нужно расшифровать пакет и зашифровать тем же методом что и у них

s.fridom
13.07.2025, 18:31
Возможно ли создавать 3D Text с помощью imgui ? и если да можно какой то пример

tanksoftik
13.07.2025, 23:58
Возможно ли создавать 3D Text с помощью imgui ? и если да можно какой то пример



C++:






CVector pos2d
;
if
(
CalcScreenCoors
(
&
CVector
(
xcor
,
ycor
,
zcor
)
,
&
pos2d
)
)
{
draw_list
->
AddText
(
ImVec2
(
pos2d
.
x
,
pos2d
.
y
)
,
IM_COL32
(
255
,
255
,
255
,
255
)
,
"text"
)
;
}

fuldic
18.07.2025, 15:48
Как начать писать .asi плагины?

NullPhantom
18.07.2025, 16:44
Как начать писать .asi плагины?


Иметь базу в с++, вроде еще реверсить уметь надо, если база имеется то:

Гайд - Создание ASI-плагина с нуля [1] (https://www.blast.hk/threads/89122/)

Делать мне было нечего, а работать не хотелось, поэтому вы видите этот гайд Создание ASI-плагина с нуля Хуки – что это такое и как с ними работать Безопасная инициализация и работа с SAMP Работа с рендером и Directx9 Обработка событий окна + ImGui В этом гайде мы создадим свой ASI-плагин с...

www.blast.hk


Начинай отсюда, после чего в том же разделе поищи другие части по asi скриптам

nonelike
20.07.2025, 20:21
хочу поменять цвет маркеру, при создании маркера цвет меняется на нужный мне, а когда я еще пересоздаю маркер уже с другим цветом, не удаляя его, или же после удаления сразу же создаю новый, цвет маркера остается, не могу понять где я еще что-то не поменял. передаю просто в C3dMarkers::PlaceMarker свои rgba. но если удалить маркер, подождать секунду и создать с новым цветом, всё будет ок

swlm
23.07.2025, 21:03
Всем привет. Есть какой-нибудь API на плюсах для работы с сетевым движком (RakNet) прямо на сервере (samp)?

А то в падлу копировать код из Pawn.RakNet

вайега52
23.07.2025, 21:18
Всем привет. Есть какой-нибудь API на плюсах для работы с сетевым движком (RakNet) прямо на сервере (samp)?
А то в падлу копировать код из Pawn.RakNet


Как-то начинал переписывать и потом забил: https://github.com/whyega/rakplugin

swlm
23.07.2025, 21:23
Как-то начинал переписывать и потом забил: https://github.com/whyega/rakplugin


Мужик спасибо. Оно рабочее?



Мужик спасибо. Оно рабочее?


Главное, чтобы это был samp-server r2

вайега52
23.07.2025, 21:41
Мужик спасибо. Оно рабочее?

Главное, чтобы это был samp-server r2


я не помню, под какую ОС делал, но да - р2. насколько рабочее точно не скажу, но есть база для работы

swlm
23.07.2025, 23:32
я не помню, под какую ОС делал, но да - р2. насколько рабочее точно не скажу, но есть база для работы


Под винду же делал, не? CMakeLists.txt

вайега52
23.07.2025, 23:53
Под винду же делал, не? CMakeLists.txt


скорее всего

swlm
24.07.2025, 18:44
скорее всего


Привет. Подключил библиотеку, вызываю rakplugin::initialize(ppData);

И сервер просто виснет на загрузке плагина.

C++:






PLUGIN_EXPORT
bool
PLUGIN_CALL
Load
(
void
*
*
ppData
)
{
//bool isSuccess = rakplugin::initialize(ppData);
rakplugin
::
initialize
(
ppData
)
;
return
PluginVoice
::
DoLoad
(
ppData
)
;
}








Привет. Подключил библиотеку, вызываю rakplugin::initialize(ppData);
И сервер просто виснет на загрузке плагина.

C++:






PLUGIN_EXPORT
bool
PLUGIN_CALL
Load
(
void
*
*
ppData
)
{
//bool isSuccess = rakplugin::initialize(ppData);
rakplugin
::
initialize
(
ppData
)
;
return
PluginVoice
::
DoLoad
(
ppData
)
;
}





Вообще, если любой метод вызываю из namespace rakplugin, то сервер тупо виснет, и ошибка загрузки плагина.

вайега52
26.07.2025, 19:20
как удалить черный экран при alt tab или сворачивании игры


Освобождать все ресурсы д3д9 перед вызовом Device::Reset ( в псдк и многих других готовых хукерах, можно найти событие Lost, которое вызывается перед ресетом). Если юзаешь имгуи, то там есть специальная функция с префиксом д3д9 invalidate, которую ты должен вызывать в каллбеке на lost

Smeruxa
27.07.2025, 18:40
Подскажите пожалуйста, как вызвать зеленый треугольник. По-разному пытался, но что-то уже мозги не варят :)

Последнее, что пытался (хз, последние надежды на функцию с псдк была):

C++:






CPed
*
t
=
CPools
::
GetPed
(
sampapi
::
v037r1
::
RefNetGame
(
)
->
GetPlayerPool
(
)
->
GetAt
(
id
)
->
m_pPlayer
->
m_pPed
->
m_handle
)
;
static_cast

(
t
)
->
DrawTriangleForMouseRecruitPed
(
)
;




C++:






// Converted from thiscall void CPlayerPed::DrawTriangleForMouseRecruitPed(void) 0x60BA80
void
CPlayerPed
::
DrawTriangleForMouseRecruitPed
(
)
{
plugin
::
CallMethod

(
this
)
;
}

ARMOR
27.07.2025, 18:57
Подскажите пожалуйста, как вызвать зеленый треугольник. По-разному пытался, но что-то уже мозги не варят :)
Последнее, что пытался (хз, последние надежды на функцию с псдк была):

C++:






CPed
*
t
=
CPools
::
GetPed
(
sampapi
::
v037r1
::
RefNetGame
(
)
->
GetPlayerPool
(
)
->
GetAt
(
id
)
->
m_pPlayer
->
m_pPed
->
m_handle
)
;
static_cast

(
t
)
->
DrawTriangleForMouseRecruitPed
(
)
;




C++:






// Converted from thiscall void CPlayerPed::DrawTriangleForMouseRecruitPed(void) 0x60BA80
void
CPlayerPed
::
DrawTriangleForMouseRecruitPed
(
)
{
plugin
::
CallMethod

(
this
)
;
}





Это потому что CPlayerPed это класс только для локального игрока. В этом методе получается

C++:






CEntity
*
CPlayerPed
::
m_p3rdPersonMouseTarget




https://forum.antichat.xyz/attachments/28624594/

И от него уже рисуется треугольник. Можно в теории переписать метод для рисования по CPed других педов

Smeruxa
27.07.2025, 20:55
Это потому что CPlayerPed это класс только для локального игрока. В этом методе получается

C++:






CEntity
*
CPlayerPed
::
m_p3rdPersonMouseTarget




И от него уже рисуется треугольник. Можно в теории переписать метод для рисования по CPed других педов


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

Т.е. рисует треугольник, видимо есть какой-то случай, вызывающий это

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
(
)
;




Может чего-то не хватает, какого-то флага/стейта

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

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, если ты не в прицеле.

swlm
02.08.2025, 19:34
Вопрос по поводу RakClient.h

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

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

RakNet:






virtual
Packet
*
Receive
(
void
)
;




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

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

RakNet:






virtual
Packet
*
Receive
(
void
)
;




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


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

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

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

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


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

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

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

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

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

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

вайега52
02.08.2025, 21:32
P.S. Я это делал в своём самп-клиенте.

Спасибо. Я так и думал, что нужно хукать вызов RakClient::Receive.
А теперь вопрос, как правильно хукать вызов RakClient::Receive?
Посмотрел в IDA PRO (sampr3.idb)
Я так понимаю, там нужно мутить что-то с RakClientInterface_vtbl?
Получать указатель на RakClientInterface, а потом с помощью оффсетов хукать функцию Receive?


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

вайега52
02.08.2025, 21:33
как полностью отключить pause mune ( esc )? пробовал отключить рендер по итогу при esc экран черный и выйти из esc не получалось


Из самого простого - хукнуть WNDPROC и не пропускать сообщение для VK_ESCAPE

swlm
02.08.2025, 22:08
в структуре 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*

вайега52
02.08.2025, 22:15
[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

swlm
02.08.2025, 22:32
Во, сделал так:

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

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







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


На R3, но нет, не совпадает: 0x5CAF637A

AdCKuY_DpO4uLa
02.08.2025, 22:41
SAMP_SDK/SAMP_API_REMASTERED/SAMP/SAMP.hpp at 20f6db662727eccddadfc5305e422741fecc1f1f · DpO4uLa/SAMP_SDK (https://github.com/DpO4uLa/SAMP_SDK/blob/20f6db662727eccddadfc5305e422741fecc1f1f/SAMP_API_REMASTERED/SAMP/SAMP.hpp#L745C7-L745C28)

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

github.com


SAMP_SDK/SAMP_API_REMASTERED/SAMP/SAMP.hpp at 20f6db662727eccddadfc5305e422741fecc1f1f · DpO4uLa/SAMP_SDK (https://github.com/DpO4uLa/SAMP_SDK/blob/20f6db662727eccddadfc5305e422741fecc1f1f/SAMP_API_REMASTERED/SAMP/SAMP.hpp#L765)

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

github.com


SAMP_SDK/SAMP_API_REMASTERED/SAMP/SAMP.hpp at 20f6db662727eccddadfc5305e422741fecc1f1f · DpO4uLa/SAMP_SDK (https://github.com/DpO4uLa/SAMP_SDK/blob/20f6db662727eccddadfc5305e422741fecc1f1f/SAMP_API_REMASTERED/SAMP/SAMP.hpp#L1569)

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

github.com

swlm
02.08.2025, 22:44
SAMP_SDK/SAMP_API_REMASTERED/SAMP/SAMP.hpp at 20f6db662727eccddadfc5305e422741fecc1f1f · DpO4uLa/SAMP_SDK (https://github.com/DpO4uLa/SAMP_SDK/blob/20f6db662727eccddadfc5305e422741fecc1f1f/SAMP_API_REMASTERED/SAMP/SAMP.hpp#L745C7-L745C28)

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

github.com


SAMP_SDK/SAMP_API_REMASTERED/SAMP/SAMP.hpp at 20f6db662727eccddadfc5305e422741fecc1f1f · DpO4uLa/SAMP_SDK (https://github.com/DpO4uLa/SAMP_SDK/blob/20f6db662727eccddadfc5305e422741fecc1f1f/SAMP_API_REMASTERED/SAMP/SAMP.hpp#L765)

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

github.com


SAMP_SDK/SAMP_API_REMASTERED/SAMP/SAMP.hpp at 20f6db662727eccddadfc5305e422741fecc1f1f · DpO4uLa/SAMP_SDK (https://github.com/DpO4uLa/SAMP_SDK/blob/20f6db662727eccddadfc5305e422741fecc1f1f/SAMP_API_REMASTERED/SAMP/SAMP.hpp#L1569)

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

github.com



ладно, сделаю тогда на функцию сразу...

вайега52
02.08.2025, 22:58
получить что-то из пакета, происходит краш.


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

swlm
02.08.2025, 23:06
Потому-что эта функция вызывается в бесконечном цикле игры и не морозит основной поток, т.е. если нет пакета для получения, возвращается nullptr (под капотом там обычное получение пакета из потокобезопасной очереди, которая пополняется внутри ракпира). Делай проверку на nullptr и должно работать


Да, сяб, проверил и всё работает.

Получается этот вариант хука правильный?

C++:





[CODE]
bool
Hooks
::
HookReceive
(
)
{
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
02.08.2025, 23:10
[QUOTE="daun.daunovich.01"]

Да, сяб, проверил и всё работает.

Получается этот вариант хука правильный?

C++:





[CODE]
bool
Hooks
::
HookReceive
(
)
{
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

swlm
11.08.2025, 19:56
Пытаюсь получить координаты локального игрока в мире, но почему-то они постоянно 0.

Что не так?

cpp:






Это R3

CVector* pos = samp->getPos();
printf("x: %f, y: %f, z: %f\n", pos->x, pos->y, pos->z);

uintptr_t* getPlayerEntity() {
uintptr_t player_pool = getPlayerPool();
uintptr_t local_info = player_pool + 0x2F14;

return reinterpret_cast(local_info + 0x2A4);
}

CVector* getPos() {
uintptr_t* gamePed = getPlayerEntity();
if (gamePed != nullptr) {
return reinterpret_cast(0x4043A0)(gamePed);
}

//return CVector(1.0, 5.0, 10.0);
}

// 0x4043A0
CSimpleTransform *__thiscall CEntity::GetPosition(CEntity *this) - функция в IDA PRO

вайега52
11.08.2025, 20:00
Пытаюсь получить координаты локального игрока в мире, но почему-то они постоянно 0.
Что не так?

cpp:






Это R3

CVector* pos = samp->getPos();
printf("x: %f, y: %f, z: %f\n", pos->x, pos->y, pos->z);

uintptr_t* getPlayerEntity() {
uintptr_t player_pool = getPlayerPool();
uintptr_t local_info = player_pool + 0x2F14;

return reinterpret_cast(local_info + 0x2A4);
}

CVector* getPos() {
uintptr_t* gamePed = getPlayerEntity();
if (gamePed != nullptr) {
return reinterpret_cast(0x4043A0)(gamePed);
}

//return CVector(1.0, 5.0, 10.0);
}

// 0x4043A0
CSimpleTransform *__thiscall CEntity::GetPosition(CEntity *this) - функция в IDA PRO





Лучше используй псдк, получай CPed* локального игрока через FindPlayerPed() и из него доставай матрицу (вроде даже есть метод GetPosition)

swlm
11.08.2025, 20:12
Лучше используй псдк, получай CPed* локального игрока через FindPlayerPed() и из него доставай матрицу (вроде даже есть метод GetPosition)


Не могу, у меня проект создан отдельно от plugin-sdk, если я его добавлю в ручную - то он работать не будет

вайега52
12.08.2025, 00:00
Не могу, у меня проект создан отдельно от plugin-sdk, если я его добавлю в ручную - то он работать не будет


Не совсем понял, как это. Ты можешь просто в свой проект подключить plugin-sdk как библиотеку



Пытаюсь получить координаты локального игрока в мире, но почему-то они постоянно 0.
Что не так?

cpp:






Это R3

CVector* pos = samp->getPos();
printf("x: %f, y: %f, z: %f\n", pos->x, pos->y, pos->z);

uintptr_t* getPlayerEntity() {
uintptr_t player_pool = getPlayerPool();
uintptr_t local_info = player_pool + 0x2F14;

return reinterpret_cast(local_info + 0x2A4);
}

CVector* getPos() {
uintptr_t* gamePed = getPlayerEntity();
if (gamePed != nullptr) {
return reinterpret_cast(0x4043A0)(gamePed);
}

//return CVector(1.0, 5.0, 10.0);
}

// 0x4043A0
CSimpleTransform *__thiscall CEntity::GetPosition(CEntity *this) - функция в IDA PRO





Если getPlayerPool возвращает указатель на пул, то +- такой код (хотя опять же, есть уже все готовое: sampapi (https://github.com/BlastHackNet/SAMP-API)):

C++:






Это R3

CVector
*
pos
=
samp
->
getPos
(
)
;
printf
(
"x: %f, y: %f, z: %f\n"
,
pos
->
x
,
pos
->
y
,
pos
->
z
)
;
uintptr_t
*
getPlayerEntity
(
)
{
uintptr_t player_pool
=
getPlayerPool
(
)
;
uintptr_t local_info
=
player_pool
+
0x2F14
;
uintptr_t
*
local_player
=
reinterpret_cast

(
local_info
+
0x26
)
;
uintptr_t samp_ped
=
*
local_player
;
// offset 0x0 CPed
uintptr_t game_ped
=
samp_ped
+
0x2A4
;
return
game_ped
;
}
CVector
*
getPos
(
)
{
uintptr_t
*
gamePed
=
getPlayerEntity
(
)
;
if
(
gamePed
!=
nullptr
)
{
return
reinterpret_cast

(
0x4043A0
)
(
gamePed
)
;
}
//return CVector(1.0, 5.0, 10.0);
}
// 0x4043A0
CSimpleTransform
*
__thiscall CEntity
::
GetPosition
(
CEntity
*
this
)
-
функция в IDA PRO

swlm
12.08.2025, 01:21
Не совсем понял, как это. Ты можешь просто в свой проект подключить plugin-sdk как библиотеку

Если getPlayerPool возвращает указатель на пул, то +- такой код (хотя опять же, есть уже все готовое: sampapi (https://github.com/BlastHackNet/SAMP-API)):

C++:






Это R3

CVector
*
pos
=
samp
->
getPos
(
)
;
printf
(
"x: %f, y: %f, z: %f\n"
,
pos
->
x
,
pos
->
y
,
pos
->
z
)
;
uintptr_t
*
getPlayerEntity
(
)
{
uintptr_t player_pool
=
getPlayerPool
(
)
;
uintptr_t local_info
=
player_pool
+
0x2F14
;
uintptr_t
*
local_player
=
reinterpret_cast

(
local_info
+
0x26
)
;
uintptr_t samp_ped
=
*
local_player
;
// offset 0x0 CPed
uintptr_t game_ped
=
samp_ped
+
0x2A4
;
return
game_ped
;
}
CVector
*
getPos
(
)
{
uintptr_t
*
gamePed
=
getPlayerEntity
(
)
;
if
(
gamePed
!=
nullptr
)
{
return
reinterpret_cast

(
0x4043A0
)
(
gamePed
)
;
}
//return CVector(1.0, 5.0, 10.0);
}
// 0x4043A0
CSimpleTransform
*
__thiscall CEntity
::
GetPosition
(
CEntity
*
this
)
-
функция в IDA PRO





Проект отдельно от plugin-sdk, это значит что проект у меня совсем в другой директории.

И если я добавлю plugin-sdk как библиотеку - то в проекте появятся какие-то ошибки...

Когда я инклуд plugin.h делаю

вайега52
12.08.2025, 01:26
Проект отдельно от plugin-sdk, это значит что проект у меня совсем в другой директории.
И если я добавлю plugin-sdk как библиотеку - то в проекте появятся какие-то ошибки...
Когда я инклуд plugin.h делаю


Значит неправильно подключаешь)

Если используешь визуалку, то копируешь псдк с гита, запускаешь его инсталлер, ставишь в первом поле путь до папки, где у тебя плагинсдк лежит, потом выбираешь версию визуалки, генерируешь проект, билдишь.

В своём проекте в настройках пишешь путь до .lib файла псдк и до заголовочных файлов

swlm
12.08.2025, 01:35
Выводило 0, до того, пока код не изменил вот так:

cpp:






uintptr_t* getPlayerEntity() {
uintptr_t player_pool = getPlayerPool();
uintptr_t local_info = player_pool + 0x2F14;
uintptr_t* local_player = reinterpret_cast(local_info + 0x26);
uintptr_t samp_ped = *local_player;
uintptr_t game_ped = samp_ped + 0x2A4;

return &game_ped;
}

CVector* getPos() {
uintptr_t* gamePed = getPlayerEntity();
if (gamePed != nullptr) {
return reinterpret_cast(0x4043A0)(gamePed);
}

//return CVector(1.0, 5.0, 10.0);
}




И вылет с ошибкой: Память не может быть Read.

А был вот такой код, до момента вылета:

cpp:






uintptr_t getPlayerEntity() {
uintptr_t player_pool = getPlayerPool();
uintptr_t local_info = player_pool + 0x2F14;
uintptr_t* local_player = reinterpret_cast(local_info + 0x26);
uintptr_t samp_ped = *local_player;
uintptr_t game_ped = samp_ped + 0x2A4;

return game_ped;
}

CVector* getPos() {
uintptr_t gamePed = getPlayerEntity();
if (&gamePed != nullptr) {
return reinterpret_cast(0x4043A0)(gamePed);
}

//return CVector(1.0, 5.0, 10.0);
}








Значит неправильно подключаешь)

Если используешь визуалку, то копируешь псдк с гита, запускаешь его инсталлер, ставишь в первом поле путь до папки, где у тебя плагинсдк лежит, потом выбираешь версию визуалки, генерируешь проект, билдишь.

В своём проекте в настройках пишешь путь до .lib файла псдк и до заголовочных файлов


Так всё и сделано, смотри, вот такая конфигурация:

cpp:









Debug
Win32


Release
Win32


Debug
x64


Release
x64



17.0
Win32Proj
{ab886c38-1f59-43d8-9935-abe2983b5637}
sampvoice
10.0



DynamicLibrary
true
v143
Unicode


DynamicLibrary
false
v143
true
Unicode




DynamicLibrary
true
v143
Unicode


DynamicLibrary
false
v143
true
Unicode





















Level3
true
WIN32;_DEBUG;SAMPVOICE_EXPORTS;_WINDOWS;_USRDLL;%( PreprocessorDefinitions)
true
Use
pch.h


Windows
true
false




Level3
true
true
true
WIN32;NDEBUG;SAMPVOICE_EXPORTS;_WINDOWS;_USRDLL;%( PreprocessorDefinitions)
true
Use
pch.h
stdcpplatest
C:\plugin-sdk\tools\myplugin-gen\generated\client-npc\RakHook\include;C:\plugin-sdk\tools\myplugin-gen\generated\client-npc\RakHook\out\build\x86-Release\_deps\cyanide-src\include;C:\plugin-sdk\tools\myplugin-gen\generated\client-npc\RakHook\out\build\x86-Release\_deps\polyhook-src\zydis\src;C:\plugin-sdk\tools\myplugin-gen\generated\client-npc\RakHook\out\build\x86-Release\_deps\polyhook-src;C:\plugin-sdk\tools\myplugin-gen\generated\client-npc\RakHook\out\build\x86-Release\_deps\polyhook-src\polyhook2;C:\plugin-sdk\tools\myplugin-gen\generated\client-npc\RakHook\out\build\x86-Release\_deps\polyhook-src\sources;C:\plugin-sdk\tools\myplugin-gen\generated\client-npc\RakHook\out\build\x86-Release\_deps\polyhook-src\zydis\include;C:\plugin-sdk\tools\myplugin-gen\generated\client-npc\RakHook\out\build\x86-Release\_deps\polyhook-src\zydis\include\Zydis;C:\plugin-sdk\tools\myplugin-gen\generated\client-npc\RakHook\out\build\x86-Release\_deps\xbyak-src;C:\plugin-sdk\tools\myplugin-gen\generated\client-npc\RakHook\out\build\x86-Release\_deps\xbyak-src\xbyak;C:\plugin-sdk\tools\myplugin-gen\generated\client-npc\RakHook\out\build\x64-Debug\_deps\polyhook-src\zydis\dependencies\zycore\include;C:\plugin-sdk\tools\myplugin-gen\generated\client-npc\RakHook\out\build\x64-Debug\_deps\polyhook-src\zydis\msvc;C:\portaudio-master\include;C:\Users\swlm\Desktop\MinHook\inclu de;C:\opus-main\include;C:\Users\swlm\Desktop\basic-template;C:\Users\swlm\Desktop\basic-template\pawn\source;C:\Users\swlm\Desktop\basic-template\pawn\source\linux;C:\Users\swlm\Desktop\b asic-template\sdk\include;C:\Users\swlm\Desktop\basic-template\sdk\lib\glm\glm\..;C:\Users\swlm\Desktop\ basic-template\sdk\lib\robin-hood-hashing\src\include;C:\Users\swlm\Desktop\basic-template\sdk\lib\span-lite\include;C:\Users\swlm\Desktop\basic-template\sdk\lib\string-view-lite\include;$(PLUGIN_SDK_DIR)\shared;$(PLUGIN_SDK _DIR)\shared\game;$(PLUGIN_SDK_DIR)\plugin_SA;$(PL UGIN_SDK_DIR)\plugin_SA\game_SA;$(PLUGIN_SDK_DIR)\ plugin_SA\game_SA\rw;%(AdditionalIncludeDirectorie s)
MultiThreaded
true


Windows
true
false
C:\plugin-sdk\output\lib;C:\opus-main\out\build\x86-Release\Release;C:\Users\swlm\Desktop\minhook\buil d\VC17\lib\Release;C:\portaudio-master\out\build\x86-Release\Release;%(AdditionalLibraryDirectories)
plugin.lib;rakhook.lib;PolyHook_2.lib;cyanide.lib; Zydis.lib;Zycore.lib;portaudio.lib;opus.lib;libMin Hook.x86.lib;kernel32.lib;user32.lib;gdi32.lib;win spool.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid. lib;comdlg32.lib;advapi32.lib;%(AdditionalDependen cies)




Level3
true
_DEBUG;SAMPVOICE_EXPORTS;_WINDOWS;_USRDLL;%(Prepro cessorDefinitions)
true
Use
pch.h


Windows
true
false




Level3
true
true
true
NDEBUG;SAMPVOICE_EXPORTS;_WINDOWS;_USRDLL;%(Prepro cessorDefinitions)
true
Use
pch.h


Windows
true
false





















Create
Create
Create
Create

вайега52
12.08.2025, 01:38
Выводило 0, до того, пока код не изменил вот так:

cpp:






uintptr_t* getPlayerEntity() {
uintptr_t player_pool = getPlayerPool();
uintptr_t local_info = player_pool + 0x2F14;
uintptr_t* local_player = reinterpret_cast(local_info + 0x26);
uintptr_t samp_ped = *local_player;
uintptr_t game_ped = samp_ped + 0x2A4;

return &game_ped;
}

CVector* getPos() {
uintptr_t* gamePed = getPlayerEntity();
if (gamePed != nullptr) {
return reinterpret_cast(0x4043A0)(gamePed);
}

//return CVector(1.0, 5.0, 10.0);
}




И вылет с ошибкой: Память не может быть Read.
А был вот такой код, до момента вылета:

cpp:






uintptr_t getPlayerEntity() {
uintptr_t player_pool = getPlayerPool();
uintptr_t local_info = player_pool + 0x2F14;
uintptr_t* local_player = reinterpret_cast(local_info + 0x26);
uintptr_t samp_ped = *local_player;
uintptr_t game_ped = samp_ped + 0x2A4;

return game_ped;
}

CVector* getPos() {
uintptr_t gamePed = getPlayerEntity();
if (&gamePed != nullptr) {
return reinterpret_cast(0x4043A0)(gamePed);
}

//return CVector(1.0, 5.0, 10.0);
}






Так всё и сделано, смотри, вот такая конфигурация:

cpp:









Debug
Win32


Release
Win32


Debug
x64


Release
x64



17.0
Win32Proj
{ab886c38-1f59-43d8-9935-abe2983b5637}
sampvoice
10.0



DynamicLibrary
true
v143
Unicode


DynamicLibrary
false
v143
true
Unicode




DynamicLibrary
true
v143
Unicode


DynamicLibrary
false
v143
true
Unicode





















Level3
true
WIN32;_DEBUG;SAMPVOICE_EXPORTS;_WINDOWS;_USRDLL;%( PreprocessorDefinitions)
true
Use
pch.h


Windows
true
false




Level3
true
true
true
WIN32;NDEBUG;SAMPVOICE_EXPORTS;_WINDOWS;_USRDLL;%( PreprocessorDefinitions)
true
Use
pch.h
stdcpplatest
C:\plugin-sdk\tools\myplugin-gen\generated\client-npc\RakHook\include;C:\plugin-sdk\tools\myplugin-gen\generated\client-npc\RakHook\out\build\x86-Release\_deps\cyanide-src\include;C:\plugin-sdk\tools\myplugin-gen\generated\client-npc\RakHook\out\build\x86-Release\_deps\polyhook-src\zydis\src;C:\plugin-sdk\tools\myplugin-gen\generated\client-npc\RakHook\out\build\x86-Release\_deps\polyhook-src;C:\plugin-sdk\tools\myplugin-gen\generated\client-npc\RakHook\out\build\x86-Release\_deps\polyhook-src\polyhook2;C:\plugin-sdk\tools\myplugin-gen\generated\client-npc\RakHook\out\build\x86-Release\_deps\polyhook-src\sources;C:\plugin-sdk\tools\myplugin-gen\generated\client-npc\RakHook\out\build\x86-Release\_deps\polyhook-src\zydis\include;C:\plugin-sdk\tools\myplugin-gen\generated\client-npc\RakHook\out\build\x86-Release\_deps\polyhook-src\zydis\include\Zydis;C:\plugin-sdk\tools\myplugin-gen\generated\client-npc\RakHook\out\build\x86-Release\_deps\xbyak-src;C:\plugin-sdk\tools\myplugin-gen\generated\client-npc\RakHook\out\build\x86-Release\_deps\xbyak-src\xbyak;C:\plugin-sdk\tools\myplugin-gen\generated\client-npc\RakHook\out\build\x64-Debug\_deps\polyhook-src\zydis\dependencies\zycore\include;C:\plugin-sdk\tools\myplugin-gen\generated\client-npc\RakHook\out\build\x64-Debug\_deps\polyhook-src\zydis\msvc;C:\portaudio-master\include;C:\Users\swlm\Desktop\MinHook\inclu de;C:\opus-main\include;C:\Users\swlm\Desktop\basic-template;C:\Users\swlm\Desktop\basic-template\pawn\source;C:\Users\swlm\Desktop\basic-template\pawn\source\linux;C:\Users\swlm\Desktop\b asic-template\sdk\include;C:\Users\swlm\Desktop\basic-template\sdk\lib\glm\glm\..;C:\Users\swlm\Desktop\ basic-template\sdk\lib\robin-hood-hashing\src\include;C:\Users\swlm\Desktop\basic-template\sdk\lib\span-lite\include;C:\Users\swlm\Desktop\basic-template\sdk\lib\string-view-lite\include;$(PLUGIN_SDK_DIR)\shared;$(PLUGIN_SDK _DIR)\shared\game;$(PLUGIN_SDK_DIR)\plugin_SA;$(PL UGIN_SDK_DIR)\plugin_SA\game_SA;$(PLUGIN_SDK_DIR)\ plugin_SA\game_SA\rw;%(AdditionalIncludeDirectorie s)
MultiThreaded
true


Windows
true
false
C:\plugin-sdk\output\lib;C:\opus-main\out\build\x86-Release\Release;C:\Users\swlm\Desktop\minhook\buil d\VC17\lib\Release;C:\portaudio-master\out\build\x86-Release\Release;%(AdditionalLibraryDirectories)
plugin.lib;rakhook.lib;PolyHook_2.lib;cyanide.lib; Zydis.lib;Zycore.lib;portaudio.lib;opus.lib;libMin Hook.x86.lib;kernel32.lib;user32.lib;gdi32.lib;win spool.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid. lib;comdlg32.lib;advapi32.lib;%(AdditionalDependen cies)




Level3
true
_DEBUG;SAMPVOICE_EXPORTS;_WINDOWS;_USRDLL;%(Prepro cessorDefinitions)
true
Use
pch.h


Windows
true
false




Level3
true
true
true
NDEBUG;SAMPVOICE_EXPORTS;_WINDOWS;_USRDLL;%(Prepro cessorDefinitions)
true
Use
pch.h


Windows
true
false





















Create
Create
Create
Create











А какие ошибки при компиляции?

swlm
12.08.2025, 01:41
А какие ошибки при компиляции?


Там их просто море...

cpp:






C:\plugin-sdk\shared\GameVersion.h(92,5): warning C4060: оператор switch не содержит метку "case" или "default"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\shared\GameVersion.h(243,5): warning C4060: оператор switch не содержит метку "case" или "default"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\shared\Other.h(214,12): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\shared\Other.h(214,22): error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "InterpV2D"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\shared\Other.h(214,22): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\shared\Other.h(214,42): error C2146: синтаксическая ошибка: отсутствие ")" перед идентификатором "a"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\shared\Other.h(214,67): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\shared\Other.h(214,67): error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CVector2D.h(25,27): warning C4099: CVector: имя типа, ранее отображенное с помощью "struct", теперь отображено с помощью "class"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\shared\extensions\Config.h(73,19): error C3646: asVec2d: неизвестный спецификатор переопределения
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\shared\extensions\Config.h(73,26): error C2059: синтаксическая ошибка: (
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\shared\extensions\Config.h(73,48): error C2238: непредвиденные лексемы перед ";"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\shared\extensions\Config.h(74,19): error C3646: asVec2d: неизвестный спецификатор переопределения
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\shared\extensions\Config.h(74,26): error C2059: синтаксическая ошибка: (
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\shared\extensions\Config.h(74,28): error C2238: непредвиденные лексемы перед ";"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(11,7): error C2011: CVector: переопределение типа "struct"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(77,16): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(78,20): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(78,31): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(78,41): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(78,52): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(78,62): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(78,73): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(78,19): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(81,16): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(82,20): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(82,31): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(82,41): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(82,52): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(82,62): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(82,73): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(82,19): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(85,16): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(86,20): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(86,40): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(86,60): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(86,19): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(89,16): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(90,20): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(90,40): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(90,60): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(90,19): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(94,13): error C2079: "diff" использует не имеющую определения структуру struct "CVector"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(94,29): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(98,1): error C2338: static_assert failed: 'Invalid structure size of CVector'
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CSimpleTransform.h(16,10): error C2079: "CSimpleTransform::m_vPosn" использует не имеющую определения структуру struct "CVector"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CSimpleTransform.h(19,22): error C2061: синтаксическая ошибка: идентификатор "RwMatrix"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CSimpleTransform.h(24,1): error C2338: static_assert failed: 'Invalid structure size of CSimpleTransform'
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CQuaternion.h(15,13): error C2079: "CQuaternion::imag" использует не имеющую определения структуру struct "CVector"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CQuaternion.h(19,14): error C2061: синтаксическая ошибка: идентификатор "RwMatrix"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CQuaternion.h(25,14): error C2061: синтаксическая ошибка: идентификатор "RwV3d"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CQuaternion.h(25,10): error C2535: void CQuaternion::Get(void): функция-член уже определена или объявлена
1>(компиляция исходного файла "pch.cpp")
1> C:\plugin-sdk\plugin_SA\game_SA\CQuaternion.h(19,10):
1> см. объявление "CQuaternion::Get"
1>C:\plugin-sdk\plugin_SA\game_SA\CQuaternion.h(34,14): error C2061: синтаксическая ошибка: идентификатор "RwMatrix"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CQuaternion.h(40,14): error C2061: синтаксическая ошибка: идентификатор "RwV3d"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CQuaternion.h(40,10): error C2535: void CQuaternion::Set(void): функция-член уже определена или объявлена
1>(компиляция исходного файла "pch.cpp")
1> C:\plugin-sdk\plugin_SA\game_SA\CQuaternion.h(34,10):
1> см. объявление "CQuaternion::Set"
1>C:\plugin-sdk\plugin_SA\game_SA\CQuaternion.h(76,1): error C2338: static_assert failed: 'Invalid structure size of CQuaternion'
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(15,18): error C2079: "CMatrix::right" использует не имеющую определения структуру struct "CVector"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(17,18): error C2079: "CMatrix::up" использует не имеющую определения структуру struct "CVector"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(19,18): error C2079: "CMatrix::at" использует не имеющую определения структуру struct "CVector"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(21,18): error C2079: "CMatrix::pos" использует не имеющую определения структуру struct "CVector"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(24,11): error C2143: синтаксическая ошибка: отсутствие ";" перед "*"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(24,2): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(24,27): error C2238: непредвиденные лексемы перед ";"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(34,10): error C2061: синтаксическая ошибка: идентификатор "RwMatrix"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(34,2): error C2535: CMatrix::CMatrix(void): функция-член уже определена или объявлена
1>(компиляция исходного файла "pch.cpp")
1> C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(27,5):
1> см. объявление "CMatrix::CMatrix"
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(36,14): error C2061: синтаксическая ошибка: идентификатор "RwMatrix"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(42,16): error C2061: синтаксическая ошибка: идентификатор "RwMatrix"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(42,7): error C2535: void CMatrix::UpdateRW(void): функция-член уже определена или объявлена
1>(компиляция исходного файла "pch.cpp")
1> C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(41,7):
1> см. объявление "CMatrix::UpdateRW"
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(61,22): error C2061: синтаксическая ошибка: идентификатор "RwMatrix"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(28,9): error C2065: m_pAttachMatrix: необъявленный идентификатор
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(70,43): error C2440: return: невозможно преобразовать "const " в "const CVector &"
1>(компиляция исходного файла "pch.cpp")
1> C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(70,43):
1> Причина: невозможно преобразовать "const " в "const CVector"
1> C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(70,43):
1> использование неопределенного типа "CVector"
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(73,45): error C2440: return: невозможно преобразовать "const " в "const CVector &"
1>(компиляция исходного файла "pch.cpp")
1> C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(73,45):
1> Причина: невозможно преобразовать "const " в "const CVector"
1> C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(73,45):
1> использование неопределенного типа "CVector"
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(76,40): error C2440: return: невозможно преобразовать "const " в "const CVector &"
1>(компиляция исходного файла "pch.cpp")
1> C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(76,40):
1> Причина: невозможно преобразовать "const " в "const CVector"
1> C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(76,40):
1> использование неопределенного типа "CVector"
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(79,46): error C2440: return: невозможно преобразовать "const " в "const CVector &"
1>(компиляция исходного файла "pch.cpp")
1> C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(79,46):
1> Причина: невозможно преобразовать "const " в "const CVector"
1> C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(79,46):
1> использование неопределенного типа "CVector"
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(82,1): error C2338: static_assert failed: 'Invalid structure size of CMatrix'
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrixLink.h(22,20): error C2144: синтаксическая ошибка: перед "void" требуется ";"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrixLink.h(22,5): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrixLink.h(23,20): error C2144: синтаксическая ошибка: перед "void" требуется ";"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrixLink.h(23,5): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrixLink.h(26,1): error C2338: static_assert failed: 'Invalid structure size of CMatrixLink'
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(20,1 9): error C2065: GAME_10US_COMPACT: необъявленный идентификатор
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(21,1 9): error C2065: GAME_10US_COMPACT: необъявленный идентификатор
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(22,1 9): error C2065: GAME_10US_COMPACT: необъявленный идентификатор
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(23,1 9): error C2065: GAME_10US_COMPACT: необъявленный идентификатор
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(24,1 9): error C2065: GAME_10US_COMPACT: необъявленный идентификатор
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(25,1 9): error C2065: GAME_10US_COMPACT: необъявленный идентификатор
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(26,1 9): error C2065: GAME_10US_COMPACT: необъявленный идентификатор
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(27,1 9): error C2065: GAME_10US_COMPACT: необъявленный идентификатор
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(28,1 9): error C2065: GAME_10US_COMPACT: необъявленный идентификатор
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(29,1 9): error C2065: GAME_10US_COMPACT: необъявленный идентификатор
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(20,1 9): error C2975: "Values": недопустимый аргумент шаблона для "plugin::RefList", ожидается константное выражение времени компиляции
1>(компиляция исходного файла "pch.cpp")
1> C:\plugin-sdk\shared\RefList.h(11,19):
1> см. объявление "Values"
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(21,1 9): error C2975: "Values": недопустимый аргумент шаблона для "plugin::RefList", ожидается константное выражение времени компиляции
1>(компиляция исходного файла "pch.cpp")
1> C:\plugin-sdk\shared\RefList.h(11,19):
1> см. объявление "Values"
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(22,1 9): error C2975: "Values": недопустимый аргумент шаблона для "plugin::RefList", ожидается константное выражение времени компиляции
1>(компиляция исходного файла "pch.cpp")
1> C:\plugin-sdk\shared\RefList.h(11,19):
1> см. объявление "Values"
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(23,1 9): error C2975: "Values": недопустимый аргумент шаблона для "plugin::RefList", ожидается константное выражение времени компиляции
1>(компиляция исходного файла "pch.cpp")
1> C:\plugin-sdk\shared\RefList.h(11,19):
1> см. объявление "Values"
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(23,1 9): error C1003: число ошибок превышает 100; остановка компиляции

вайега52
12.08.2025, 01:48
Там их просто море...

cpp:






C:\plugin-sdk\shared\GameVersion.h(92,5): warning C4060: оператор switch не содержит метку "case" или "default"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\shared\GameVersion.h(243,5): warning C4060: оператор switch не содержит метку "case" или "default"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\shared\Other.h(214,12): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\shared\Other.h(214,22): error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "InterpV2D"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\shared\Other.h(214,22): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\shared\Other.h(214,42): error C2146: синтаксическая ошибка: отсутствие ")" перед идентификатором "a"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\shared\Other.h(214,67): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\shared\Other.h(214,67): error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CVector2D.h(25,27): warning C4099: CVector: имя типа, ранее отображенное с помощью "struct", теперь отображено с помощью "class"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\shared\extensions\Config.h(73,19): error C3646: asVec2d: неизвестный спецификатор переопределения
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\shared\extensions\Config.h(73,26): error C2059: синтаксическая ошибка: (
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\shared\extensions\Config.h(73,48): error C2238: непредвиденные лексемы перед ";"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\shared\extensions\Config.h(74,19): error C3646: asVec2d: неизвестный спецификатор переопределения
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\shared\extensions\Config.h(74,26): error C2059: синтаксическая ошибка: (
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\shared\extensions\Config.h(74,28): error C2238: непредвиденные лексемы перед ";"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(11,7): error C2011: CVector: переопределение типа "struct"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(77,16): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(78,20): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(78,31): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(78,41): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(78,52): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(78,62): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(78,73): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(78,19): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(81,16): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(82,20): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(82,31): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(82,41): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(82,52): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(82,62): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(82,73): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(82,19): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(85,16): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(86,20): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(86,40): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(86,60): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(86,19): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(89,16): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(90,20): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(90,40): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(90,60): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(90,19): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(94,13): error C2079: "diff" использует не имеющую определения структуру struct "CVector"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(94,29): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(98,1): error C2338: static_assert failed: 'Invalid structure size of CVector'
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CSimpleTransform.h(16,10): error C2079: "CSimpleTransform::m_vPosn" использует не имеющую определения структуру struct "CVector"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CSimpleTransform.h(19,22): error C2061: синтаксическая ошибка: идентификатор "RwMatrix"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CSimpleTransform.h(24,1): error C2338: static_assert failed: 'Invalid structure size of CSimpleTransform'
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CQuaternion.h(15,13): error C2079: "CQuaternion::imag" использует не имеющую определения структуру struct "CVector"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CQuaternion.h(19,14): error C2061: синтаксическая ошибка: идентификатор "RwMatrix"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CQuaternion.h(25,14): error C2061: синтаксическая ошибка: идентификатор "RwV3d"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CQuaternion.h(25,10): error C2535: void CQuaternion::Get(void): функция-член уже определена или объявлена
1>(компиляция исходного файла "pch.cpp")
1> C:\plugin-sdk\plugin_SA\game_SA\CQuaternion.h(19,10):
1> см. объявление "CQuaternion::Get"
1>C:\plugin-sdk\plugin_SA\game_SA\CQuaternion.h(34,14): error C2061: синтаксическая ошибка: идентификатор "RwMatrix"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CQuaternion.h(40,14): error C2061: синтаксическая ошибка: идентификатор "RwV3d"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CQuaternion.h(40,10): error C2535: void CQuaternion::Set(void): функция-член уже определена или объявлена
1>(компиляция исходного файла "pch.cpp")
1> C:\plugin-sdk\plugin_SA\game_SA\CQuaternion.h(34,10):
1> см. объявление "CQuaternion::Set"
1>C:\plugin-sdk\plugin_SA\game_SA\CQuaternion.h(76,1): error C2338: static_assert failed: 'Invalid structure size of CQuaternion'
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(15,18): error C2079: "CMatrix::right" использует не имеющую определения структуру struct "CVector"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(17,18): error C2079: "CMatrix::up" использует не имеющую определения структуру struct "CVector"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(19,18): error C2079: "CMatrix::at" использует не имеющую определения структуру struct "CVector"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(21,18): error C2079: "CMatrix::pos" использует не имеющую определения структуру struct "CVector"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(24,11): error C2143: синтаксическая ошибка: отсутствие ";" перед "*"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(24,2): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(24,27): error C2238: непредвиденные лексемы перед ";"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(34,10): error C2061: синтаксическая ошибка: идентификатор "RwMatrix"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(34,2): error C2535: CMatrix::CMatrix(void): функция-член уже определена или объявлена
1>(компиляция исходного файла "pch.cpp")
1> C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(27,5):
1> см. объявление "CMatrix::CMatrix"
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(36,14): error C2061: синтаксическая ошибка: идентификатор "RwMatrix"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(42,16): error C2061: синтаксическая ошибка: идентификатор "RwMatrix"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(42,7): error C2535: void CMatrix::UpdateRW(void): функция-член уже определена или объявлена
1>(компиляция исходного файла "pch.cpp")
1> C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(41,7):
1> см. объявление "CMatrix::UpdateRW"
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(61,22): error C2061: синтаксическая ошибка: идентификатор "RwMatrix"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(28,9): error C2065: m_pAttachMatrix: необъявленный идентификатор
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(70,43): error C2440: return: невозможно преобразовать "const " в "const CVector &"
1>(компиляция исходного файла "pch.cpp")
1> C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(70,43):
1> Причина: невозможно преобразовать "const " в "const CVector"
1> C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(70,43):
1> использование неопределенного типа "CVector"
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(73,45): error C2440: return: невозможно преобразовать "const " в "const CVector &"
1>(компиляция исходного файла "pch.cpp")
1> C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(73,45):
1> Причина: невозможно преобразовать "const " в "const CVector"
1> C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(73,45):
1> использование неопределенного типа "CVector"
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(76,40): error C2440: return: невозможно преобразовать "const " в "const CVector &"
1>(компиляция исходного файла "pch.cpp")
1> C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(76,40):
1> Причина: невозможно преобразовать "const " в "const CVector"
1> C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(76,40):
1> использование неопределенного типа "CVector"
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(79,46): error C2440: return: невозможно преобразовать "const " в "const CVector &"
1>(компиляция исходного файла "pch.cpp")
1> C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(79,46):
1> Причина: невозможно преобразовать "const " в "const CVector"
1> C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(79,46):
1> использование неопределенного типа "CVector"
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(82,1): error C2338: static_assert failed: 'Invalid structure size of CMatrix'
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrixLink.h(22,20): error C2144: синтаксическая ошибка: перед "void" требуется ";"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrixLink.h(22,5): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrixLink.h(23,20): error C2144: синтаксическая ошибка: перед "void" требуется ";"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrixLink.h(23,5): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrixLink.h(26,1): error C2338: static_assert failed: 'Invalid structure size of CMatrixLink'
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(20,1 9): error C2065: GAME_10US_COMPACT: необъявленный идентификатор
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(21,1 9): error C2065: GAME_10US_COMPACT: необъявленный идентификатор
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(22,1 9): error C2065: GAME_10US_COMPACT: необъявленный идентификатор
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(23,1 9): error C2065: GAME_10US_COMPACT: необъявленный идентификатор
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(24,1 9): error C2065: GAME_10US_COMPACT: необъявленный идентификатор
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(25,1 9): error C2065: GAME_10US_COMPACT: необъявленный идентификатор
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(26,1 9): error C2065: GAME_10US_COMPACT: необъявленный идентификатор
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(27,1 9): error C2065: GAME_10US_COMPACT: необъявленный идентификатор
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(28,1 9): error C2065: GAME_10US_COMPACT: необъявленный идентификатор
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(29,1 9): error C2065: GAME_10US_COMPACT: необъявленный идентификатор
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(20,1 9): error C2975: "Values": недопустимый аргумент шаблона для "plugin::RefList", ожидается константное выражение времени компиляции
1>(компиляция исходного файла "pch.cpp")
1> C:\plugin-sdk\shared\RefList.h(11,19):
1> см. объявление "Values"
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(21,1 9): error C2975: "Values": недопустимый аргумент шаблона для "plugin::RefList", ожидается константное выражение времени компиляции
1>(компиляция исходного файла "pch.cpp")
1> C:\plugin-sdk\shared\RefList.h(11,19):
1> см. объявление "Values"
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(22,1 9): error C2975: "Values": недопустимый аргумент шаблона для "plugin::RefList", ожидается константное выражение времени компиляции
1>(компиляция исходного файла "pch.cpp")
1> C:\plugin-sdk\shared\RefList.h(11,19):
1> см. объявление "Values"
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(23,1 9): error C2975: "Values": недопустимый аргумент шаблона для "plugin::RefList", ожидается константное выражение времени компиляции
1>(компиляция исходного файла "pch.cpp")
1> C:\plugin-sdk\shared\RefList.h(11,19):
1> см. объявление "Values"
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(23,1 9): error C1003: число ошибок превышает 100; остановка компиляции





Скорее всего неправильно расставлены инклуды

swlm
12.08.2025, 01:50
game_ped почему-то nullptr

cpp:






uintptr_t getPlayerEntity() {
uintptr_t player_pool = getPlayerPool();
uintptr_t local_info = player_pool + 0x2F14;
uintptr_t* local_player = reinterpret_cast(local_info + 0x26);
uintptr_t samp_ped = *local_player;
uintptr_t game_ped = samp_ped + 0x2A4;

return game_ped;
}

CVector* getPos() {
uintptr_t gamePed = getPlayerEntity();
if (!gamePed) {
return reinterpret_cast(0x4043A0)(gamePed);
}

return new CVector{ 1.0, 0.0, 10.0 };
}






Получилось, получил координаты.

Правильный вариант оказался таким:

cpp:






uintptr_t getPlayerEntity() {
uintptr_t player_pool = getPlayerPool();
uintptr_t local = player_pool + 0x2F14;

uintptr_t local_info = *reinterpret_cast(local + 0x26);
if (!local_info) return 0;

uintptr_t samp_ped = *reinterpret_cast(local_info + 0x0);
uintptr_t game_ped = *reinterpret_cast(samp_ped + 0x2A4);

return game_ped;
}

CVector* getPos() {
uintptr_t gamePed = getPlayerEntity();
if (gamePed) {
return reinterpret_cast(0x4043A0)(gamePed);
}

return new CVector{ 1.0, 0.0, 10.0 };
}

fuflexxxx
12.08.2025, 05:01
Там их просто море...

cpp:






C:\plugin-sdk\shared\GameVersion.h(92,5): warning C4060: оператор switch не содержит метку "case" или "default"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\shared\GameVersion.h(243,5): warning C4060: оператор switch не содержит метку "case" или "default"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\shared\Other.h(214,12): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\shared\Other.h(214,22): error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "InterpV2D"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\shared\Other.h(214,22): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\shared\Other.h(214,42): error C2146: синтаксическая ошибка: отсутствие ")" перед идентификатором "a"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\shared\Other.h(214,67): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\shared\Other.h(214,67): error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CVector2D.h(25,27): warning C4099: CVector: имя типа, ранее отображенное с помощью "struct", теперь отображено с помощью "class"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\shared\extensions\Config.h(73,19): error C3646: asVec2d: неизвестный спецификатор переопределения
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\shared\extensions\Config.h(73,26): error C2059: синтаксическая ошибка: (
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\shared\extensions\Config.h(73,48): error C2238: непредвиденные лексемы перед ";"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\shared\extensions\Config.h(74,19): error C3646: asVec2d: неизвестный спецификатор переопределения
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\shared\extensions\Config.h(74,26): error C2059: синтаксическая ошибка: (
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\shared\extensions\Config.h(74,28): error C2238: непредвиденные лексемы перед ";"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(11,7): error C2011: CVector: переопределение типа "struct"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(77,16): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(78,20): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(78,31): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(78,41): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(78,52): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(78,62): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(78,73): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(78,19): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(81,16): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(82,20): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(82,31): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(82,41): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(82,52): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(82,62): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(82,73): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(82,19): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(85,16): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(86,20): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(86,40): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(86,60): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(86,19): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(89,16): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(90,20): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(90,40): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(90,60): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(90,19): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(94,13): error C2079: "diff" использует не имеющую определения структуру struct "CVector"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(94,29): error C2027: использование неопределенного типа "CVector"
1>(компиляция исходного файла "pch.cpp")
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CVector.h(98,1): error C2338: static_assert failed: 'Invalid structure size of CVector'
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CSimpleTransform.h(16,10): error C2079: "CSimpleTransform::m_vPosn" использует не имеющую определения структуру struct "CVector"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CSimpleTransform.h(19,22): error C2061: синтаксическая ошибка: идентификатор "RwMatrix"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CSimpleTransform.h(24,1): error C2338: static_assert failed: 'Invalid structure size of CSimpleTransform'
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CQuaternion.h(15,13): error C2079: "CQuaternion::imag" использует не имеющую определения структуру struct "CVector"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CQuaternion.h(19,14): error C2061: синтаксическая ошибка: идентификатор "RwMatrix"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CQuaternion.h(25,14): error C2061: синтаксическая ошибка: идентификатор "RwV3d"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CQuaternion.h(25,10): error C2535: void CQuaternion::Get(void): функция-член уже определена или объявлена
1>(компиляция исходного файла "pch.cpp")
1> C:\plugin-sdk\plugin_SA\game_SA\CQuaternion.h(19,10):
1> см. объявление "CQuaternion::Get"
1>C:\plugin-sdk\plugin_SA\game_SA\CQuaternion.h(34,14): error C2061: синтаксическая ошибка: идентификатор "RwMatrix"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CQuaternion.h(40,14): error C2061: синтаксическая ошибка: идентификатор "RwV3d"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CQuaternion.h(40,10): error C2535: void CQuaternion::Set(void): функция-член уже определена или объявлена
1>(компиляция исходного файла "pch.cpp")
1> C:\plugin-sdk\plugin_SA\game_SA\CQuaternion.h(34,10):
1> см. объявление "CQuaternion::Set"
1>C:\plugin-sdk\plugin_SA\game_SA\CQuaternion.h(76,1): error C2338: static_assert failed: 'Invalid structure size of CQuaternion'
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(15,18): error C2079: "CMatrix::right" использует не имеющую определения структуру struct "CVector"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(17,18): error C2079: "CMatrix::up" использует не имеющую определения структуру struct "CVector"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(19,18): error C2079: "CMatrix::at" использует не имеющую определения структуру struct "CVector"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(21,18): error C2079: "CMatrix::pos" использует не имеющую определения структуру struct "CVector"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(24,11): error C2143: синтаксическая ошибка: отсутствие ";" перед "*"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(24,2): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(24,27): error C2238: непредвиденные лексемы перед ";"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(34,10): error C2061: синтаксическая ошибка: идентификатор "RwMatrix"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(34,2): error C2535: CMatrix::CMatrix(void): функция-член уже определена или объявлена
1>(компиляция исходного файла "pch.cpp")
1> C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(27,5):
1> см. объявление "CMatrix::CMatrix"
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(36,14): error C2061: синтаксическая ошибка: идентификатор "RwMatrix"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(42,16): error C2061: синтаксическая ошибка: идентификатор "RwMatrix"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(42,7): error C2535: void CMatrix::UpdateRW(void): функция-член уже определена или объявлена
1>(компиляция исходного файла "pch.cpp")
1> C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(41,7):
1> см. объявление "CMatrix::UpdateRW"
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(61,22): error C2061: синтаксическая ошибка: идентификатор "RwMatrix"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(28,9): error C2065: m_pAttachMatrix: необъявленный идентификатор
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(70,43): error C2440: return: невозможно преобразовать "const " в "const CVector &"
1>(компиляция исходного файла "pch.cpp")
1> C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(70,43):
1> Причина: невозможно преобразовать "const " в "const CVector"
1> C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(70,43):
1> использование неопределенного типа "CVector"
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(73,45): error C2440: return: невозможно преобразовать "const " в "const CVector &"
1>(компиляция исходного файла "pch.cpp")
1> C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(73,45):
1> Причина: невозможно преобразовать "const " в "const CVector"
1> C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(73,45):
1> использование неопределенного типа "CVector"
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(76,40): error C2440: return: невозможно преобразовать "const " в "const CVector &"
1>(компиляция исходного файла "pch.cpp")
1> C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(76,40):
1> Причина: невозможно преобразовать "const " в "const CVector"
1> C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(76,40):
1> использование неопределенного типа "CVector"
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(79,46): error C2440: return: невозможно преобразовать "const " в "const CVector &"
1>(компиляция исходного файла "pch.cpp")
1> C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(79,46):
1> Причина: невозможно преобразовать "const " в "const CVector"
1> C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(79,46):
1> использование неопределенного типа "CVector"
1> C:\Users\swlm\source\repos\samp-voice\samp-voice\CMultiplayer.h(4,8):
1> см. объявление "CVector"
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrix.h(82,1): error C2338: static_assert failed: 'Invalid structure size of CMatrix'
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrixLink.h(22,20): error C2144: синтаксическая ошибка: перед "void" требуется ";"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrixLink.h(22,5): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrixLink.h(23,20): error C2144: синтаксическая ошибка: перед "void" требуется ";"
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrixLink.h(23,5): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\CMatrixLink.h(26,1): error C2338: static_assert failed: 'Invalid structure size of CMatrixLink'
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(20,1 9): error C2065: GAME_10US_COMPACT: необъявленный идентификатор
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(21,1 9): error C2065: GAME_10US_COMPACT: необъявленный идентификатор
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(22,1 9): error C2065: GAME_10US_COMPACT: необъявленный идентификатор
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(23,1 9): error C2065: GAME_10US_COMPACT: необъявленный идентификатор
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(24,1 9): error C2065: GAME_10US_COMPACT: необъявленный идентификатор
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(25,1 9): error C2065: GAME_10US_COMPACT: необъявленный идентификатор
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(26,1 9): error C2065: GAME_10US_COMPACT: необъявленный идентификатор
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(27,1 9): error C2065: GAME_10US_COMPACT: необъявленный идентификатор
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(28,1 9): error C2065: GAME_10US_COMPACT: необъявленный идентификатор
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(29,1 9): error C2065: GAME_10US_COMPACT: необъявленный идентификатор
1>(компиляция исходного файла "pch.cpp")
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(20,1 9): error C2975: "Values": недопустимый аргумент шаблона для "plugin::RefList", ожидается константное выражение времени компиляции
1>(компиляция исходного файла "pch.cpp")
1> C:\plugin-sdk\shared\RefList.h(11,19):
1> см. объявление "Values"
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(21,1 9): error C2975: "Values": недопустимый аргумент шаблона для "plugin::RefList", ожидается константное выражение времени компиляции
1>(компиляция исходного файла "pch.cpp")
1> C:\plugin-sdk\shared\RefList.h(11,19):
1> см. объявление "Values"
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(22,1 9): error C2975: "Values": недопустимый аргумент шаблона для "plugin::RefList", ожидается константное выражение времени компиляции
1>(компиляция исходного файла "pch.cpp")
1> C:\plugin-sdk\shared\RefList.h(11,19):
1> см. объявление "Values"
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(23,1 9): error C2975: "Values": недопустимый аргумент шаблона для "plugin::RefList", ожидается константное выражение времени компиляции
1>(компиляция исходного файла "pch.cpp")
1> C:\plugin-sdk\shared\RefList.h(11,19):
1> см. объявление "Values"
1>C:\plugin-sdk\plugin_SA\game_SA\meta\meta.CMatrixLink.h(23,1 9): error C1003: число ошибок превышает 100; остановка компиляции





Стандарт с++ поставь последний.

Lusikkip
13.08.2025, 02:32
Код:






#include "includes.h"

#ifdef _WIN64
#define GWL_WNDPROC GWLP_WNDPROC
#endif

extern LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);

EndScene oEndScene = NULL;
WNDPROC oWndProc;
static HWND window = NULL;

void InitImGui(LPDIRECT3DDEVICE9 pDevice)
{
ImGui::CreateContext();
ImGuiIO& io = ImGui::GetIO();
io.ConfigFlags = ImGuiConfigFlags_NoMouseCursorChange;
ImGui_ImplWin32_Init(window);
ImGui_ImplDX9_Init(pDevice);
}

bool init = false;
long __stdcall hkEndScene(LPDIRECT3DDEVICE9 pDevice)
{
if (!init)
{
InitImGui(pDevice);
init = true;
}

ImGui_ImplDX9_NewFrame();
ImGui_ImplWin32_NewFrame();
ImGui::NewFrame();


ImGui::Begin("ImGui Menu");
if (ImGui::Button("Click Me"))
{

MessageBox(NULL, "Button clicked!", "Info", MB_OK);
}
ImGui::End();

ImGui::EndFrame();
ImGui::Render();
ImGui_ImplDX9_RenderDrawData(ImGui::GetDrawData()) ;

return oEndScene(pDevice);
}

LRESULT __stdcall WndProc(const HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
if (true && ImGui_ImplWin32_WndProcHandler(hWnd, uMsg, wParam, lParam))
return true;

return CallWindowProc(oWndProc, hWnd, uMsg, wParam, lParam);
}

BOOL CALLBACK EnumWindowsCallback(HWND handle, LPARAM lParam)
{
DWORD wndProcId;
GetWindowThreadProcessId(handle, &wndProcId);

if (GetCurrentProcessId() != wndProcId)
return TRUE;

window = handle;
return FALSE;
}

HWND GetProcessWindow()
{
window = NULL;
EnumWindows(EnumWindowsCallback, NULL);
return window;
}

DWORD WINAPI MainThread(LPVOID lpReserved)
{
bool attached = false;
do
{
if (kiero::init(kiero::RenderType::D3D9) == kiero::Status::Success)
{
kiero::bind(42, (void**)&oEndScene, hkEndScene);
do
window = GetProcessWindow();
while (window == NULL);
oWndProc = (WNDPROC)SetWindowLongPtr(window, GWL_WNDPROC, (LONG_PTR)WndProc);
attached = true;
}
} while (!attached);
return TRUE;
}

BOOL WINAPI DllMain(HMODULE hMod, DWORD dwReason, LPVOID lpReserved)
{
switch (dwReason)
{
case DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls(hMod);
CreateThread(nullptr, 0, MainThread, hMod, 0, nullptr);
break;
case DLL_PROCESS_DETACH:
kiero::shutdown();
break;
}
return TRUE;
}




Пытаюсь увеличить окно, не увеличивается, пытаюсь свернуть, не сворачивается, нажимаю на кнопку не нажимается, пытаюсь ввести что то в input, не вводится, нечего не происходит только курсор мыши торчит, и камеру не повернешь

writeline
21.08.2025, 03:58
При запуске предлагает выбрать монитор и разрешение, как можно перехватить это окно выбора и изменить, картинку там добавить или текст какой то?

Через IDA смотрел не нашёл по strings ничего подобного.



Пытаюсь получить координаты локального игрока в мире, но почему-то они постоянно 0.
Что не так?

cpp:






Это R3

CVector* pos = samp->getPos();
printf("x: %f, y: %f, z: %f\n", pos->x, pos->y, pos->z);

uintptr_t* getPlayerEntity() {
uintptr_t player_pool = getPlayerPool();
uintptr_t local_info = player_pool + 0x2F14;

return reinterpret_cast(local_info + 0x2A4);
}

CVector* getPos() {
uintptr_t* gamePed = getPlayerEntity();
if (gamePed != nullptr) {
return reinterpret_cast(0x4043A0)(gamePed);
}

//return CVector(1.0, 5.0, 10.0);
}

// 0x4043A0
CSimpleTransform *__thiscall CEntity::GetPosition(CEntity *this) - функция в IDA PRO






с++:






float
*
GetPlayerPositionPtr
(
)
{
DWORD playerPtr
=
*
(
DWORD
*
)
0xB6F5F0
;
if
(
!
playerPtr
)
return
nullptr
;
DWORD pedPtr
=
*
(
DWORD
*
)
(
playerPtr
+
0x14
)
;
if
(
!
pedPtr
)
return
nullptr
;
return
(
float
*
)
(
pedPtr
+
0x30
)
;
}
void
DrawCoordinates
(
)
{
float
*
position
=
GetPlayerPositionPtr
(
)
;
if
(
!
position
)
return
;
char
buffer
[
128
]
;
sprintf_s
(
buffer
,
"%.3f %.3f %.3f"
,
position
[
0
]
,
position
[
1
]
,
position
[
2
]
)
;
RECT textRect
=
{
0
}
;
pFontNormal
->
DrawTextA
(
NULL
,
buffer
,
-
1
,
&
textRect
,
DT_CALCRECT
|
DT_LEFT
,
0
)
;
int
xPos
=
viewport
.
Width
-
(
textRect
.
right
-
textRect
.
left
)
-
1
;
int
yPos
=
viewport
.
Height
-
(
textRect
.
bottom
-
textRect
.
top
)
-
1
;
RECT drawRect
=
{
xPos
,
yPos
,
xPos
+
(
textRect
.
right
-
textRect
.
left
)
,
yPos
+
(
textRect
.
bottom
-
textRect
.
top
)
}
;
DrawTextOutlined
(
pFontNormal
,
buffer
,
drawRect
,
COORDS_COLOR
,
SHADOW_COLOR
,
/*thickness=*/
1
)
;
}




Вырвал из клиента, мб чего то не будет хватать.

Но реализация рабочая.

https://forum.antichat.xyz/attachments/28631094/

swlm
24.08.2025, 00:36
При запуске предлагает выбрать монитор и разрешение, как можно перехватить это окно выбора и изменить, картинку там добавить или текст какой то?
Через IDA смотрел не нашёл по strings ничего подобного.

с++:






float
*
GetPlayerPositionPtr
(
)
{
DWORD playerPtr
=
*
(
DWORD
*
)
0xB6F5F0
;
if
(
!
playerPtr
)
return
nullptr
;
DWORD pedPtr
=
*
(
DWORD
*
)
(
playerPtr
+
0x14
)
;
if
(
!
pedPtr
)
return
nullptr
;
return
(
float
*
)
(
pedPtr
+
0x30
)
;
}
void
DrawCoordinates
(
)
{
float
*
position
=
GetPlayerPositionPtr
(
)
;
if
(
!
position
)
return
;
char
buffer
[
128
]
;
sprintf_s
(
buffer
,
"%.3f %.3f %.3f"
,
position
[
0
]
,
position
[
1
]
,
position
[
2
]
)
;
RECT textRect
=
{
0
}
;
pFontNormal
->
DrawTextA
(
NULL
,
buffer
,
-
1
,
&
textRect
,
DT_CALCRECT
|
DT_LEFT
,
0
)
;
int
xPos
=
viewport
.
Width
-
(
textRect
.
right
-
textRect
.
left
)
-
1
;
int
yPos
=
viewport
.
Height
-
(
textRect
.
bottom
-
textRect
.
top
)
-
1
;
RECT drawRect
=
{
xPos
,
yPos
,
xPos
+
(
textRect
.
right
-
textRect
.
left
)
,
yPos
+
(
textRect
.
bottom
-
textRect
.
top
)
}
;
DrawTextOutlined
(
pFontNormal
,
buffer
,
drawRect
,
COORDS_COLOR
,
SHADOW_COLOR
,
/*thickness=*/
1
)
;
}




Вырвал из клиента, мб чего то не будет хватать.
Но реализация рабочая.


Да я уже давно справился с этой задачей. Но всё равно спасибо.

Всем привет. Вопрос следующего характера. Не могу понять, почему при Render`е обычного 3D текста через графическую библиотеку ImGui при ALT + ENTER (смене разрешения) всё нормально, но, стоит мне сделать ALT + ENTER, то ники мои вообще не вижу (собсна, которые рендерю через ImGui)

А если я сделаю ALT + ENTER в момент когда рендерится ник над головой, то игра вообще не развернётся и всё.

В чём трабл?

Единственное что удивляет, с HP/Armour барами такого нету.

Может дело в шрифте?

cpp:






void
__fastcall
CPlayerTags_DrawHealthBar_Hook
(
void
*
thisptr
,
void
*
edx
,
CVectorSamp
*
position
,
float
fHealth
,
float
fArmour
,
float
fDistanceToCamera
)
{
if
(
!
deviceReset
)
return
cPlayerTags_DrawHealthBar
(
thisptr
,
position
,
fHealth
,
fArmour
,
fDistanceToCamera
)
;
Main
::
RenderBars
(
position
,
fDistanceToCamera
,
fHealth
,
fArmour
)
;
}
void
__fastcall
CPlayerTags_DrawLabel_Hook
(
void
*
thisptr
,
void
*
edx
,
CVectorSamp
*
position
,
const
char
*
szText
,
unsigned
long
color
,
float
fDistanceCamera
,
bool
bDrawStatus
,
int
nStatus
)
{
/*if (true) {
return;
}*/
if
(
!
deviceReset
)
return
cPlayerTags_DrawLabel
(
thisptr
,
position
,
szText
,
color
,
fDistanceCamera
,
bDrawStatus
,
nStatus
)
;
Main
::
RenderText
(
szText
,
position
,
color
,
fDistanceCamera
)
;
}
Инициализация ImGui
.
Events
::
initGameEvent
+=
[
]
(
)
{
CHooks
::
InitMinHook
(
)
;
ImGui
::
CreateContext
(
)
;
ImGuiIO
&
io
=
ImGui
::
GetIO
(
)
;
(
void
)
io
;
io
.
ConfigFlags
|=
ImGuiConfigFlags_NoMouseCursorChange
;
myFont
=
io
.
Fonts
->
AddFontFromFileTTF
(
std
::
string
(
CUtils
::
GetPath
(
)
+
"font.ttf"
)
.
c_str
(
)
,
18.0f
,
NULL
,
io
.
Fonts
->
GetGlyphRangesCyrillic
(
)
)
;
if
(
myFont
==
nullptr
)
{
printf
(
"font not found\n"
)
;
myFont
=
io
.
Fonts
->
AddFontDefault
(
)
;
}
ImGui
::
StyleColorsDark
(
)
;
ImGui_ImplWin32_Init
(
GetActiveWindow
(
)
)
;
ImGui_ImplDX9_Init
(
*
reinterpret_cast

(
0xC97C28
)
)
;
CHooks
::
GameLoop_HookInstall
(
)
;
CHooks
::
CLabel__DrawHookInstall
(
)
;
CHooks
::
CPlayerTags__DrawLabelHookInstall
(
)
;
CHooks
::
CPlayerTags__DrawHealthBarHookInstall
(
)
;
return
true
;
}
;
Events
::
d3dResetEvent
+=
[
]
(
)
{
deviceReset
=
true
;
ImGui_ImplWin32_Init
(
GetActiveWindow
(
)
)
;
ImGui_ImplDX9_Init
(
*
reinterpret_cast

(
0xC97C28
)
)
;
ImGui_ImplDX9_CreateDeviceObjects
(
)
;
ImGuiIO
&
io
=
ImGui
::
GetIO
(
)
;
io
.
Fonts
->
AddFontFromFileTTF
(
std
::
string
(
CUtils
::
GetPath
(
)
+
"font.ttf"
)
.
c_str
(
)
,
18.0f
,
NULL
,
io
.
Fonts
->
GetGlyphRangesCyrillic
(
)
)
;
io
.
Fonts
->
Build
(
)
;
return
true
;
}
;
Events
::
d3dLostEvent
+=
[
]
(
)
{
if
(
!
deviceReset
)
return
true
;
deviceReset
=
false
;
ImGui_ImplWin32_Shutdown
(
)
;
ImGui_ImplDX9_Shutdown
(
)
;
ImGui_ImplDX9_InvalidateDeviceObjects
(
)
;
ImGuiIO
&
io
=
ImGui
::
GetIO
(
)
;
io
.
Fonts
->
Clear
(
)
;
// Очистить текущие шрифты
return
true
;
}
;
extern
"C"
__declspec
(
dllexport
)
void
Ext_RenderText
(
const
char
*
szText
,
CVectorSamp
*
position
,
unsigned
long
color
,
float
fDistanceToCamera
,
bool
isBot
=
false
)
{
if
(
!
deviceReset
)
return
;
ImGui_ImplDX9_NewFrame
(
)
;
ImGui_ImplWin32_NewFrame
(
)
;
ImGui
::
NewFrame
(
)
;
position
->
z
=
fDistanceToCamera
*
0.047499999
+
position
->
z
+
0.2
;
RwV3d pos
{
position
->
x
,
position
->
y
,
position
->
z
}
;
RwV3d out
;
float
width
,
height
;
uint8_t
r
,
g
,
b
,
a
;
CUtils
::
explode_argb
(
(
uint32_t
)
color
,
a
,
r
,
g
,
b
)
;
CVector cameraPos
=
TheCamera
.
GetPosition
(
)
;
CEntity
*
entity
=
FindPlayerPed
(
)
;
CColPoint colPoint
;
bool
isLineOfSight
=
!
CWorld
::
ProcessLineOfSight
(
cameraPos
,
pos
,
colPoint
,
entity
,
true
,
false
,
false
,
true
,
false
,
true
,
false
,
false
)
;
if
(
!
isLineOfSight
)
return
;
if
(
CSprite
::
CalcScreenCoors
(
pos
,
&
out
,
&
width
,
&
height
,
true
,
true
)
)
{
ImVec2
screenPos
(
out
.
x
,
out
.
y
+
4.0f
)
;
ImDrawList
*
drawList
=
ImGui
::
GetForegroundDrawList
(
)
;
std
::
string utf8Text
=
CUtils
::
ConvertAnsiToUtf8
(
szText
)
;
auto
RemoveColorCodes
=
[
]
(
const
std
::
string
&
text
)
->
std
::
string
{
std
::
string result
=
text
;
size_t pos
=
0
;
while
(
(
pos
=
result
.
find
(
'{'
,
pos
)
)
!=
std
::
string
::
npos
)
{
size_t endPos
=
result
.
find
(
'}'
,
pos
)
;
if
(
endPos
!=
std
::
string
::
npos
)
{
result
.
erase
(
pos
,
endPos
-
pos
+
1
)
;
}
else
{
break
;
}
}
return
result
;
}
;
std
::
string nickname
;
int
playerID
=
-
1
;
size_t openBracket
=
utf8Text
.
find
(
'('
)
;
if
(
openBracket
!=
std
::
string
::
npos
)
{
size_t closeBracket
=
utf8Text
.
find
(
')'
,
openBracket
)
;
if
(
closeBracket
!=
std
::
string
::
npos
)
{
nickname
=
utf8Text
.
substr
(
0
,
openBracket
)
;
std
::
string idString
=
utf8Text
.
substr
(
openBracket
+
1
,
closeBracket
-
openBracket
-
1
)
;
try
{
playerID
=
std
::
stoi
(
idString
)
;
}
catch
(
const
std
::
exception
&
)
{
playerID
=
-
1
;
}
if
(
!
nickname
.
empty
(
)
&&
nickname
.
back
(
)
==
' '
)
{
nickname
.
pop_back
(
)
;
}
}
}
else
{
nickname
=
utf8Text
;
playerID
=
-
1
;
}
UINT32 characterId
=
0
;
if
(
CHooks
::
playersCharacterId
.
contains
(
playerID
)
)
{
characterId
=
CHooks
::
playersCharacterId
[
playerID
]
;
}
if
(
!
characterId
&&
!
isBot
)
return
;
if
(
isBot
)
characterId
=
playerID
;
nickname
=
RemoveColorCodes
(
nickname
)
;
std
::
string characterIdPart
=
" #"
+
std
::
to_string
(
characterId
)
;
ImVec2 nicknameSize
=
ImGui
::
CalcTextSize
(
nickname
.
c_str
(
)
)
;
ImVec2 characterIdSize
=
ImGui
::
CalcTextSize
(
characterIdPart
.
c_str
(
)
)
;
ImVec2 totalSize
=
ImVec2
(
nicknameSize
.
x
+
characterIdSize
.
x
,
std
::
max
(
nicknameSize
.
y
,
characterIdSize
.
y
)
)
;
ImVec2 centeredPos
=
screenPos
;
centeredPos
.
x
-=
totalSize
.
x
/
2.0f
;
centeredPos
.
y
-=
totalSize
.
y
/
2.0f
;
auto
DrawTextOutline
=
[
&
]
(
const
ImVec2
&
pos
,
const
std
::
string
&
text
,
ImU32 textColor
,
ImU32 outlineColor
=
IM_COL32
(
0
,
0
,
0
,
255
)
)
{
float
outlineThickness
=
1.0f
;
ImVec2 offsets
[
]
=
{
ImVec2
(
-
outlineThickness
,
-
outlineThickness
)
,
// лево-верх
ImVec2
(
0
,
-
outlineThickness
)
,
// верх
ImVec2
(
outlineThickness
,
-
outlineThickness
)
,
// право-верх
ImVec2
(
-
outlineThickness
,
0
)
,
// лево
ImVec2
(
outlineThickness
,
0
)
,
// право
ImVec2
(
-
outlineThickness
,
outlineThickness
)
,
// лево-низ
ImVec2
(
0
,
outlineThickness
)
,
// низ
ImVec2
(
outlineThickness
,
outlineThickness
)
// право-низ
}
;
for
(
int
layer
=
0
;
layer

AddText
(
myFont
,
ImGui
::
GetFontSize
(
)
,
outlinePos
,
outlineColor
,
text
.
c_str
(
)
)
;
}
}
drawList
->
AddText
(
myFont
,
ImGui
::
GetFontSize
(
)
,
pos
,
textColor
,
text
.
c_str
(
)
)
;
}
;
if
(
!
nickname
.
empty
(
)
)
{
ImU32 nicknameColor
=
IM_COL32
(
r
,
g
,
b
,
255
)
;
DrawTextOutline
(
centeredPos
,
nickname
,
nicknameColor
)
;
}
ImVec2 characterIdPos
=
ImVec2
(
centeredPos
.
x
+
nicknameSize
.
x
,
centeredPos
.
y
)
;
ImU32 whiteColor
=
IM_COL32
(
255
,
255
,
255
,
255
)
;
DrawTextOutline
(
characterIdPos
,
characterIdPart
,
whiteColor
)
;
}
ImGui
::
EndFrame
(
)
;
ImGui
::
Render
(
)
;
ImGui_ImplDX9_RenderDrawData
(
ImGui
::
GetDrawData
(
)
)
;
}

вайега52
24.08.2025, 00:57
ImGuiIO& io = ImGui::GetIO(); io.Fonts->Clear(); // Очистить текущие шрифты


как будто бы это лишнее. никогда не чистил шрифты при лосте

writeline
24.08.2025, 01:25
Да я уже давно справился с этой задачей. Но всё равно спасибо.

Всем привет. Вопрос следующего характера. Не могу понять, почему при Render`е обычного 3D текста через графическую библиотеку ImGui при ALT + ENTER (смене разрешения) всё нормально, но, стоит мне сделать ALT + ENTER, то ники мои вообще не вижу (собсна, которые рендерю через ImGui)
А если я сделаю ALT + ENTER в момент когда рендерится ник над головой, то игра вообще не развернётся и всё.

В чём трабл?
Единственное что удивляет, с HP/Armour барами такого нету.
Может дело в шрифте?

cpp:






void
__fastcall
CPlayerTags_DrawHealthBar_Hook
(
void
*
thisptr
,
void
*
edx
,
CVectorSamp
*
position
,
float
fHealth
,
float
fArmour
,
float
fDistanceToCamera
)
{
if
(
!
deviceReset
)
return
cPlayerTags_DrawHealthBar
(
thisptr
,
position
,
fHealth
,
fArmour
,
fDistanceToCamera
)
;
Main
::
RenderBars
(
position
,
fDistanceToCamera
,
fHealth
,
fArmour
)
;
}
void
__fastcall
CPlayerTags_DrawLabel_Hook
(
void
*
thisptr
,
void
*
edx
,
CVectorSamp
*
position
,
const
char
*
szText
,
unsigned
long
color
,
float
fDistanceCamera
,
bool
bDrawStatus
,
int
nStatus
)
{
/*if (true) {
return;
}*/
if
(
!
deviceReset
)
return
cPlayerTags_DrawLabel
(
thisptr
,
position
,
szText
,
color
,
fDistanceCamera
,
bDrawStatus
,
nStatus
)
;
Main
::
RenderText
(
szText
,
position
,
color
,
fDistanceCamera
)
;
}
Инициализация ImGui
.
Events
::
initGameEvent
+=
[
]
(
)
{
CHooks
::
InitMinHook
(
)
;
ImGui
::
CreateContext
(
)
;
ImGuiIO
&
io
=
ImGui
::
GetIO
(
)
;
(
void
)
io
;
io
.
ConfigFlags
|=
ImGuiConfigFlags_NoMouseCursorChange
;
myFont
=
io
.
Fonts
->
AddFontFromFileTTF
(
std
::
string
(
CUtils
::
GetPath
(
)
+
"font.ttf"
)
.
c_str
(
)
,
18.0f
,
NULL
,
io
.
Fonts
->
GetGlyphRangesCyrillic
(
)
)
;
if
(
myFont
==
nullptr
)
{
printf
(
"font not found\n"
)
;
myFont
=
io
.
Fonts
->
AddFontDefault
(
)
;
}
ImGui
::
StyleColorsDark
(
)
;
ImGui_ImplWin32_Init
(
GetActiveWindow
(
)
)
;
ImGui_ImplDX9_Init
(
*
reinterpret_cast

(
0xC97C28
)
)
;
CHooks
::
GameLoop_HookInstall
(
)
;
CHooks
::
CLabel__DrawHookInstall
(
)
;
CHooks
::
CPlayerTags__DrawLabelHookInstall
(
)
;
CHooks
::
CPlayerTags__DrawHealthBarHookInstall
(
)
;
return
true
;
}
;
Events
::
d3dResetEvent
+=
[
]
(
)
{
deviceReset
=
true
;
ImGui_ImplWin32_Init
(
GetActiveWindow
(
)
)
;
ImGui_ImplDX9_Init
(
*
reinterpret_cast

(
0xC97C28
)
)
;
ImGui_ImplDX9_CreateDeviceObjects
(
)
;
ImGuiIO
&
io
=
ImGui
::
GetIO
(
)
;
io
.
Fonts
->
AddFontFromFileTTF
(
std
::
string
(
CUtils
::
GetPath
(
)
+
"font.ttf"
)
.
c_str
(
)
,
18.0f
,
NULL
,
io
.
Fonts
->
GetGlyphRangesCyrillic
(
)
)
;
io
.
Fonts
->
Build
(
)
;
return
true
;
}
;
Events
::
d3dLostEvent
+=
[
]
(
)
{
if
(
!
deviceReset
)
return
true
;
deviceReset
=
false
;
ImGui_ImplWin32_Shutdown
(
)
;
ImGui_ImplDX9_Shutdown
(
)
;
ImGui_ImplDX9_InvalidateDeviceObjects
(
)
;
ImGuiIO
&
io
=
ImGui
::
GetIO
(
)
;
io
.
Fonts
->
Clear
(
)
;
// Очистить текущие шрифты
return
true
;
}
;
extern
"C"
__declspec
(
dllexport
)
void
Ext_RenderText
(
const
char
*
szText
,
CVectorSamp
*
position
,
unsigned
long
color
,
float
fDistanceToCamera
,
bool
isBot
=
false
)
{
if
(
!
deviceReset
)
return
;
ImGui_ImplDX9_NewFrame
(
)
;
ImGui_ImplWin32_NewFrame
(
)
;
ImGui
::
NewFrame
(
)
;
position
->
z
=
fDistanceToCamera
*
0.047499999
+
position
->
z
+
0.2
;
RwV3d pos
{
position
->
x
,
position
->
y
,
position
->
z
}
;
RwV3d out
;
float
width
,
height
;
uint8_t
r
,
g
,
b
,
a
;
CUtils
::
explode_argb
(
(
uint32_t
)
color
,
a
,
r
,
g
,
b
)
;
CVector cameraPos
=
TheCamera
.
GetPosition
(
)
;
CEntity
*
entity
=
FindPlayerPed
(
)
;
CColPoint colPoint
;
bool
isLineOfSight
=
!
CWorld
::
ProcessLineOfSight
(
cameraPos
,
pos
,
colPoint
,
entity
,
true
,
false
,
false
,
true
,
false
,
true
,
false
,
false
)
;
if
(
!
isLineOfSight
)
return
;
if
(
CSprite
::
CalcScreenCoors
(
pos
,
&
out
,
&
width
,
&
height
,
true
,
true
)
)
{
ImVec2
screenPos
(
out
.
x
,
out
.
y
+
4.0f
)
;
ImDrawList
*
drawList
=
ImGui
::
GetForegroundDrawList
(
)
;
std
::
string utf8Text
=
CUtils
::
ConvertAnsiToUtf8
(
szText
)
;
auto
RemoveColorCodes
=
[
]
(
const
std
::
string
&
text
)
->
std
::
string
{
std
::
string result
=
text
;
size_t pos
=
0
;
while
(
(
pos
=
result
.
find
(
'{'
,
pos
)
)
!=
std
::
string
::
npos
)
{
size_t endPos
=
result
.
find
(
'}'
,
pos
)
;
if
(
endPos
!=
std
::
string
::
npos
)
{
result
.
erase
(
pos
,
endPos
-
pos
+
1
)
;
}
else
{
break
;
}
}
return
result
;
}
;
std
::
string nickname
;
int
playerID
=
-
1
;
size_t openBracket
=
utf8Text
.
find
(
'('
)
;
if
(
openBracket
!=
std
::
string
::
npos
)
{
size_t closeBracket
=
utf8Text
.
find
(
')'
,
openBracket
)
;
if
(
closeBracket
!=
std
::
string
::
npos
)
{
nickname
=
utf8Text
.
substr
(
0
,
openBracket
)
;
std
::
string idString
=
utf8Text
.
substr
(
openBracket
+
1
,
closeBracket
-
openBracket
-
1
)
;
try
{
playerID
=
std
::
stoi
(
idString
)
;
}
catch
(
const
std
::
exception
&
)
{
playerID
=
-
1
;
}
if
(
!
nickname
.
empty
(
)
&&
nickname
.
back
(
)
==
' '
)
{
nickname
.
pop_back
(
)
;
}
}
}
else
{
nickname
=
utf8Text
;
playerID
=
-
1
;
}
UINT32 characterId
=
0
;
if
(
CHooks
::
playersCharacterId
.
contains
(
playerID
)
)
{
characterId
=
CHooks
::
playersCharacterId
[
playerID
]
;
}
if
(
!
characterId
&&
!
isBot
)
return
;
if
(
isBot
)
characterId
=
playerID
;
nickname
=
RemoveColorCodes
(
nickname
)
;
std
::
string characterIdPart
=
" #"
+
std
::
to_string
(
characterId
)
;
ImVec2 nicknameSize
=
ImGui
::
CalcTextSize
(
nickname
.
c_str
(
)
)
;
ImVec2 characterIdSize
=
ImGui
::
CalcTextSize
(
characterIdPart
.
c_str
(
)
)
;
ImVec2 totalSize
=
ImVec2
(
nicknameSize
.
x
+
characterIdSize
.
x
,
std
::
max
(
nicknameSize
.
y
,
characterIdSize
.
y
)
)
;
ImVec2 centeredPos
=
screenPos
;
centeredPos
.
x
-=
totalSize
.
x
/
2.0f
;
centeredPos
.
y
-=
totalSize
.
y
/
2.0f
;
auto
DrawTextOutline
=
[
&
]
(
const
ImVec2
&
pos
,
const
std
::
string
&
text
,
ImU32 textColor
,
ImU32 outlineColor
=
IM_COL32
(
0
,
0
,
0
,
255
)
)
{
float
outlineThickness
=
1.0f
;
ImVec2 offsets
[
]
=
{
ImVec2
(
-
outlineThickness
,
-
outlineThickness
)
,
// лево-верх
ImVec2
(
0
,
-
outlineThickness
)
,
// верх
ImVec2
(
outlineThickness
,
-
outlineThickness
)
,
// право-верх
ImVec2
(
-
outlineThickness
,
0
)
,
// лево
ImVec2
(
outlineThickness
,
0
)
,
// право
ImVec2
(
-
outlineThickness
,
outlineThickness
)
,
// лево-низ
ImVec2
(
0
,
outlineThickness
)
,
// низ
ImVec2
(
outlineThickness
,
outlineThickness
)
// право-низ
}
;
for
(
int
layer
=
0
;
layer

AddText
(
myFont
,
ImGui
::
GetFontSize
(
)
,
outlinePos
,
outlineColor
,
text
.
c_str
(
)
)
;
}
}
drawList
->
AddText
(
myFont
,
ImGui
::
GetFontSize
(
)
,
pos
,
textColor
,
text
.
c_str
(
)
)
;
}
;
if
(
!
nickname
.
empty
(
)
)
{
ImU32 nicknameColor
=
IM_COL32
(
r
,
g
,
b
,
255
)
;
DrawTextOutline
(
centeredPos
,
nickname
,
nicknameColor
)
;
}
ImVec2 characterIdPos
=
ImVec2
(
centeredPos
.
x
+
nicknameSize
.
x
,
centeredPos
.
y
)
;
ImU32 whiteColor
=
IM_COL32
(
255
,
255
,
255
,
255
)
;
DrawTextOutline
(
characterIdPos
,
characterIdPart
,
whiteColor
)
;
}
ImGui
::
EndFrame
(
)
;
ImGui
::
Render
(
)
;
ImGui_ImplDX9_RenderDrawData
(
ImGui
::
GetDrawData
(
)
)
;
}





У меня подобное было при рендере текста через DirectX, попробуй восстанавливать состояние, я обошёл это обычным перезапуском рендера

swlm
24.08.2025, 01:30
У меня подобное было при рендере текста через DirectX, попробуй восстанавливать состояние, я обошёл это обычным перезапуском рендера


Ты имеешь ввиду вот это?

cpp:






ImGui_ImplWin32_Init
(
GetActiveWindow
(
)
)
;
ImGui_ImplDX9_Init
(
*
reinterpret_cast

(
0xC97C28
)
)
;




Восстанавливать состояние? Не особо понял, что ты имел ввиду.



Ты имеешь ввиду вот это?

cpp:






ImGui_ImplWin32_Init
(
GetActiveWindow
(
)
)
;
ImGui_ImplDX9_Init
(
*
reinterpret_cast

(
0xC97C28
)
)
;




Восстанавливать состояние? Не особо понял, что ты имел ввиду.



P.S. Всё исправил. Проблема была в моей невнимательности.



Ты имеешь ввиду вот это?

cpp:






ImGui_ImplWin32_Init
(
GetActiveWindow
(
)
)
;
ImGui_ImplDX9_Init
(
*
reinterpret_cast

(
0xC97C28
)
)
;




Восстанавливать состояние? Не особо понял, что ты имел ввиду.

P.S. Всё исправил. Проблема была в моей невнимательности.


Моим нервам *****, нихуя не исправилось, как исправить эту ебаную ***ню?

С WindowedMode всё заебись и ALT + ENTER нормально работает, но как я удалю этот ебучий WindowedMode всё летит к хуям собачим, а именно текст ломается на*** "появляются квадратики какие-то"

cpp:






Events
::
initGameEvent
+=
[
]
(
)
{
CHooks
::
InitMinHook
(
)
;
ImGui
::
CreateContext
(
)
;
ImGuiIO
&
io
=
ImGui
::
GetIO
(
)
;
(
void
)
io
;
io
.
ConfigFlags
|=
ImGuiConfigFlags_NoMouseCursorChange
;
myFont
=
io
.
Fonts
->
AddFontFromFileTTF
(
std
::
string
(
CUtils
::
GetPath
(
)
+
"font.ttf"
)
.
c_str
(
)
,
18.0f
,
NULL
,
io
.
Fonts
->
GetGlyphRangesCyrillic
(
)
)
;
if
(
myFont
==
nullptr
)
{
printf
(
"font not found\n"
)
;
myFont
=
io
.
Fonts
->
AddFontDefault
(
)
;
}
ImGui
::
StyleColorsDark
(
)
;
ImGui_ImplWin32_Init
(
GetActiveWindow
(
)
)
;
ImGui_ImplDX9_Init
(
*
reinterpret_cast

(
0xC97C28
)
)
;
CHooks
::
GameLoop_HookInstall
(
)
;
CHooks
::
CLabel__DrawHookInstall
(
)
;
CHooks
::
CPlayerTags__DrawLabelHookInstall
(
)
;
CHooks
::
CPlayerTags__DrawHealthBarHookInstall
(
)
;
return
true
;
}
;
Events
::
d3dResetEvent
+=
[
]
(
)
{
if
(
!
deviceReset
)
return
false
;
deviceReset
=
false
;
//ImGui::CreateContext();
//ImGui_ImplWin32_Init(GetActiveWindow());
//ImGui_ImplDX9_Init(*reinterpret_cast(0xC97C28));
ImGui_ImplDX9_CreateDeviceObjects
(
)
;
ImGuiIO
&
io
=
ImGui
::
GetIO
(
)
;
io
.
Fonts
->
AddFontFromFileTTF
(
std
::
string
(
CUtils
::
GetPath
(
)
+
"font.ttf"
)
.
c_str
(
)
,
18.0f
,
NULL
,
io
.
Fonts
->
GetGlyphRangesCyrillic
(
)
)
;
io
.
Fonts
->
Build
(
)
;
return
true
;
}
;
Events
::
d3dLostEvent
+=
[
]
(
)
{
deviceReset
=
true
;
//ImGui_ImplWin32_Shutdown();
//ImGui_ImplDX9_Shutdown();
ImGui_ImplDX9_InvalidateDeviceObjects
(
)
;
//ImGuiIO& io = ImGui::GetIO();
//io.Fonts->Clear(); // Очистить текущие шрифты
return
true
;
}
;
Events
::
pedDtorEvent
+=
[
]
(
CPed
*
ped
)
{
int
playerId
=
CMultiplayer
::
GetPlayerID
(
ped
)
;
if
(
playerId
!=
65535
)
{
CHooks
::
playersCharacterId
.
erase
(
playerId
)
;
}
}
;
}
;
}
grade_tags
;
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD fdwReason
,
LPVOID lpReserved
)
{
if
(
fdwReason
==
DLL_PROCESS_ATTACH
)
{
}
//gChat.initialize();
else
if
(
fdwReason
==
DLL_PROCESS_DETACH
)
{
ImGui_ImplDX9_Shutdown
(
)
;
ImGui_ImplWin32_Shutdown
(
)
;
ImGui
::
DestroyContext
(
)
;
}
return
TRUE
;
}
extern
"C"
__declspec
(
dllexport
)
void
Ext_RenderText
(
const
char
*
szText
,
CVectorSamp
*
position
,
unsigned
long
color
,
float
fDistanceToCamera
,
bool
isBot
=
false
)
{
if
(
deviceReset
)
return
;
ImGui_ImplDX9_NewFrame
(
)
;
ImGui_ImplWin32_NewFrame
(
)
;
ImGui
::
NewFrame
(
)
;
position
->
z
=
fDistanceToCamera
*
0.047499999
+
position
->
z
+
0.2
;
RwV3d pos
{
position
->
x
,
position
->
y
,
position
->
z
}
;
RwV3d out
;
float
width
,
height
;
uint8_t
r
,
g
,
b
,
a
;
CUtils
::
explode_argb
(
(
uint32_t
)
color
,
a
,
r
,
g
,
b
)
;
CVector cameraPos
=
TheCamera
.
GetPosition
(
)
;
CEntity
*
entity
=
FindPlayerPed
(
)
;
CColPoint colPoint
;
bool
isLineOfSight
=
!
CWorld
::
ProcessLineOfSight
(
cameraPos
,
pos
,
colPoint
,
entity
,
true
,
false
,
false
,
true
,
false
,
true
,
false
,
false
)
;
if
(
!
isLineOfSight
)
return
;
if
(
CSprite
::
CalcScreenCoors
(
pos
,
&
out
,
&
width
,
&
height
,
true
,
true
)
)
{
ImVec2
screenPos
(
out
.
x
,
out
.
y
+
4.0f
)
;
ImDrawList
*
drawList
=
ImGui
::
GetForegroundDrawList
(
)
;
std
::
string utf8Text
=
CUtils
::
ConvertAnsiToUtf8
(
szText
)
;
auto
RemoveColorCodes
=
[
]
(
const
std
::
string
&
text
)
->
std
::
string
{
std
::
string result
=
text
;
size_t pos
=
0
;
while
(
(
pos
=
result
.
find
(
'{'
,
pos
)
)
!=
std
::
string
::
npos
)
{
size_t endPos
=
result
.
find
(
'}'
,
pos
)
;
if
(
endPos
!=
std
::
string
::
npos
)
{
result
.
erase
(
pos
,
endPos
-
pos
+
1
)
;
}
else
{
break
;
}
}
return
result
;
}
;
std
::
string nickname
;
int
playerID
=
-
1
;
size_t openBracket
=
utf8Text
.
find
(
'('
)
;
if
(
openBracket
!=
std
::
string
::
npos
)
{
size_t closeBracket
=
utf8Text
.
find
(
')'
,
openBracket
)
;
if
(
closeBracket
!=
std
::
string
::
npos
)
{
nickname
=
utf8Text
.
substr
(
0
,
openBracket
)
;
std
::
string idString
=
utf8Text
.
substr
(
openBracket
+
1
,
closeBracket
-
openBracket
-
1
)
;
try
{
playerID
=
std
::
stoi
(
idString
)
;
}
catch
(
const
std
::
exception
&
)
{
playerID
=
-
1
;
}
if
(
!
nickname
.
empty
(
)
&&
nickname
.
back
(
)
==
' '
)
{
nickname
.
pop_back
(
)
;
}
}
}
else
{
nickname
=
utf8Text
;
playerID
=
-
1
;
}
UINT32 characterId
=
0
;
if
(
CHooks
::
playersCharacterId
.
contains
(
playerID
)
)
{
characterId
=
CHooks
::
playersCharacterId
[
playerID
]
;
}
if
(
!
characterId
&&
!
isBot
)
return
;
if
(
isBot
)
characterId
=
playerID
;
nickname
=
RemoveColorCodes
(
nickname
)
;
std
::
string characterIdPart
=
" #"
+
std
::
to_string
(
characterId
)
;
ImVec2 nicknameSize
=
ImGui
::
CalcTextSize
(
nickname
.
c_str
(
)
)
;
ImVec2 characterIdSize
=
ImGui
::
CalcTextSize
(
characterIdPart
.
c_str
(
)
)
;
ImVec2 totalSize
=
ImVec2
(
nicknameSize
.
x
+
characterIdSize
.
x
,
std
::
max
(
nicknameSize
.
y
,
characterIdSize
.
y
)
)
;
ImVec2 centeredPos
=
screenPos
;
centeredPos
.
x
-=
totalSize
.
x
/
2.0f
;
centeredPos
.
y
-=
totalSize
.
y
/
2.0f
;
auto
DrawTextOutline
=
[
&
]
(
const
ImVec2
&
pos
,
const
std
::
string
&
text
,
ImU32 textColor
,
ImU32 outlineColor
=
IM_COL32
(
0
,
0
,
0
,
255
)
)
{
float
outlineThickness
=
1.0f
;
ImVec2 offsets
[
]
=
{
ImVec2
(
-
outlineThickness
,
-
outlineThickness
)
,
// лево-верх
ImVec2
(
0
,
-
outlineThickness
)
,
// верх
ImVec2
(
outlineThickness
,
-
outlineThickness
)
,
// право-верх
ImVec2
(
-
outlineThickness
,
0
)
,
// лево
ImVec2
(
outlineThickness
,
0
)
,
// право
ImVec2
(
-
outlineThickness
,
outlineThickness
)
,
// лево-низ
ImVec2
(
0
,
outlineThickness
)
,
// низ
ImVec2
(
outlineThickness
,
outlineThickness
)
// право-низ
}
;
for
(
int
layer
=
0
;
layer

AddText
(
myFont
,
ImGui
::
GetFontSize
(
)
,
outlinePos
,
outlineColor
,
text
.
c_str
(
)
)
;
}
}
drawList
->
AddText
(
myFont
,
ImGui
::
GetFontSize
(
)
,
pos
,
textColor
,
text
.
c_str
(
)
)
;
}
;
if
(
!
nickname
.
empty
(
)
)
{
ImU32 nicknameColor
=
IM_COL32
(
r
,
g
,
b
,
255
)
;
DrawTextOutline
(
centeredPos
,
nickname
,
nicknameColor
)
;
}
ImVec2 characterIdPos
=
ImVec2
(
centeredPos
.
x
+
nicknameSize
.
x
,
centeredPos
.
y
)
;
ImU32 whiteColor
=
IM_COL32
(
255
,
255
,
255
,
255
)
;
DrawTextOutline
(
characterIdPos
,
characterIdPart
,
whiteColor
)
;
}
ImGui
::
EndFrame
(
)
;
ImGui
::
Render
(
)
;
ImGui_ImplDX9_RenderDrawData
(
ImGui
::
GetDrawData
(
)
)
;
}
Всякие хуки
void
__fastcall
CPlayerTags_DrawHealthBar_Hook
(
void
*
thisptr
,
void
*
edx
,
CVectorSamp
*
position
,
float
fHealth
,
float
fArmour
,
float
fDistanceToCamera
)
{
if
(
deviceReset
)
return
cPlayerTags_DrawHealthBar
(
thisptr
,
position
,
fHealth
,
fArmour
,
fDistanceToCamera
)
;
Main
::
RenderBars
(
position
,
fDistanceToCamera
,
fHealth
,
fArmour
)
;
}
void
__fastcall
CPlayerTags_DrawLabel_Hook
(
void
*
thisptr
,
void
*
edx
,
CVectorSamp
*
position
,
const
char
*
szText
,
unsigned
long
color
,
float
fDistanceCamera
,
bool
bDrawStatus
,
int
nStatus
)
{
/*if (true) {
return;
}*/
if
(
deviceReset
)
return
cPlayerTags_DrawLabel
(
thisptr
,
position
,
szText
,
color
,
fDistanceCamera
,
bDrawStatus
,
nStatus
)
;
Main
::
RenderText
(
szText
,
position
,
color
,
fDistanceCamera
)
;
}

вайега52
24.08.2025, 21:15
ImGui_ImplDX9_CreateDeviceObjects(); ImGuiIO& io = ImGui::GetIO(); io.Fonts->AddFontFromFileTTF(std::string(CUtils::GetPath() + "font.ttf").c_str(), 18.0f, NULL, io.Fonts->GetGlyphRangesCyrillic()); io.Fonts->Build();


лишнее

swlm
24.08.2025, 22:26
лишнее


и вот такую ***ню вижу, когда нажимаю кнопки ALT и ENTER





https://forum.antichat.xyz/attachments/28631906/

вайега52
24.08.2025, 22:40
и вот такую ***ню вижу, когда нажимаю кнопки ALT и ENTER


При удалении создания шрифта в ресете, ничего не меняется?

swlm
24.08.2025, 22:44
При удалении создания шрифта в ресете, ничего не меняется?


У меня вообще подозрения на то, что я не правильно понял предназначения этих двух Event`ов

cpp:






Events
::
d3dResetEvent
+=
[
]
(
)
{
if
(
!
deviceReset
)
return
false
;
deviceReset
=
false
;
ImGui
::
CreateContext
(
)
;
//ImGui_ImplWin32_Init(GetActiveWindow());
//ImGui_ImplDX9_Init(*reinterpret_cast(0xC97C28));
//ImGui_ImplDX9_CreateDeviceObjects();
//ImGuiIO& io = ImGui::GetIO();
//io.Fonts->AddFontFromFileTTF(std::string(CUtils::GetPath() + "font.ttf").c_str(), 18.0f, NULL, io.Fonts->GetGlyphRangesCyrillic());
//io.Fonts->Build();
return
true
;
}
;
Events
::
d3dLostEvent
+=
[
]
(
)
{
deviceReset
=
true
;
//ImGui_ImplWin32_Shutdown();
//ImGui_ImplDX9_Shutdown();
ImGui_ImplDX9_InvalidateDeviceObjects
(
)
;
ImGuiIO
&
io
=
ImGui
::
GetIO
(
)
;
io
.
Fonts
->
Clear
(
)
;
// Очистить текущие шрифты
return
true
;
}
;




lost, когда же потерян фокус с экраном, а reset - восстановлен фокус с экраном?

Так-вот, я делаю очистку шрифта, и у меня игра сразу же при запуске.

вайега52
24.08.2025, 23:35
lost, когда же потерян фокус с экраном, а reset - восстановлен фокус с экраном?


В точку



Так-вот, я делаю очистку шрифта, и у меня игра сразу же при запуске.


Это не нужно делать, достаточно вызвать ImGui_ImplDX9_InvalidateDeviceObjects (Восстанавливать состояния в этом случае также не требуется. Это делается автоматически)

swlm
24.08.2025, 23:42
В точку

Это не нужно делать, достаточно вызвать ImGui_ImplDX9_InvalidateDeviceObjects (Восстанавливать состояния в этом случае также не требуется. Это делается автоматически)


пиздец(

и чо делать?

ImGui_ImplDX9_InvalidateDeviceObjects(); вот у меня вызывается в lost event

очистку шрифтов я убрал, но ничего не изменяется(((

вайега52
25.08.2025, 00:20
пиздец(
и чо делать?
ImGui_ImplDX9_InvalidateDeviceObjects(); вот у меня вызывается в lost event
очистку шрифтов я убрал, но ничего не изменяется(((


Можешь скинуть проект в ЛС, я в свободное время гляну

вайега52
26.08.2025, 23:22
короче есть такой код

C++:






void
show_cursor
(
bool
state
)
{
using
RwD3D9GetCurrentD3DDevice_t
=
LPDIRECT3DDEVICE9
(
__cdecl
*
)
(
)
;
auto
rwCurrentD3dDevice
{
reinterpret_cast

(
0x7F9D50U
)
(
)
}
;
if
(
nullptr
==
rwCurrentD3dDevice
)
{
return
;
}
static
DWORD
updateMouseProtection
,
rsMouseSetPosProtFirst
,
rsMouseSetPosProtSecond
;
if
(
state
)
{
::
VirtualProtect
(
reinterpret_cast

(
0x53F3C6U
)
,
5U
,
PAGE_EXECUTE_READWRITE
,
&
updateMouseProtection
)
;
::
VirtualProtect
(
reinterpret_cast

(
0x53E9F1U
)
,
5U
,
PAGE_EXECUTE_READWRITE
,
&
rsMouseSetPosProtFirst
)
;
::
VirtualProtect
(
reinterpret_cast

(
0x748A1BU
)
,
5U
,
PAGE_EXECUTE_READWRITE
,
&
rsMouseSetPosProtSecond
)
;
// NOP: CPad::UpdateMouse
*
reinterpret_cast

(
0x53F3C6U
)
=
0xE9U
;
*
reinterpret_cast

(
0x53F3C6U
+
1U
)
=
0x15BU
;
// NOP: RsMouseSetPos
memset
(
reinterpret_cast

(
0x53E9F1U
)
,
0x90
,
5U
)
;
memset
(
reinterpret_cast

(
0x748A1BU
)
,
0x90
,
5U
)
;
rwCurrentD3dDevice
->
ShowCursor
(
TRUE
)
;
}
else
{
// Original: CPad::UpdateMouse
memcpy
(
reinterpret_cast

(
0x53F3C6U
)
,
"\xE8\x95\x6C\x20\x00"
,
5U
)
;
// Original: RsMouseSetPos
memcpy
(
reinterpret_cast

(
0x53E9F1U
)
,
"\xE8\xAA\xAA\x0D\x00"
,
5U
)
;
memcpy
(
reinterpret_cast

(
0x748A1BU
)
,
"\xE8\x80\x0A\xED\xFF"
,
5U
)
;
using
CPad_ClearMouseHistory_t
=
void
(
__cdecl
*
)
(
)
;
using
CPad_UpdatePads_t
=
void
(
__cdecl
*
)
(
)
;
reinterpret_cast

(
0x541BD0U
)
(
)
;
reinterpret_cast

(
0x541DD0U
)
(
)
;
::
VirtualProtect
(
reinterpret_cast

(
0x53F3C6U
)
,
5U
,
updateMouseProtection
,
&
updateMouseProtection
)
;
::
VirtualProtect
(
reinterpret_cast

(
0x53E9F1U
)
,
5U
,
rsMouseSetPosProtFirst
,
&
rsMouseSetPosProtFirst
)
;
::
VirtualProtect
(
reinterpret_cast

(
0x748A1BU
)
,
5U
,
rsMouseSetPosProtSecond
,
&
rsMouseSetPosProtSecond
)
;
rwCurrentD3dDevice
->
ShowCursor
(
FALSE
)
;
}
}




и там есть трабл в том что при выводе курсора можно управлять педом, но а мне надо что бы при выводе курсора нельзя было типо как в сампе открываешь чат/esc что бы так же выводило



SAMP-API/src/sampapi/0.3.7-R1/CGame.cpp at 6d4db99ab41f19d1a6a7c6cd48f5878bd1e14b62 · BlastHackNet/SAMP-API (https://github.com/BlastHackNet/SAMP-API/blob/6d4db99ab41f19d1a6a7c6cd48f5878bd1e14b62/src/sampapi/0.3.7-R1/CGame.cpp#L50)

A library for interacting with functions, classes and structures of SA-MP client - BlastHackNet/SAMP-API

github.com

swlm
04.09.2025, 18:54
Столкнулся с такой проблемой, что на Windows 11 32-х битной структуры плагины не запускаются (ну когда x86 выбираешь в Visual Studio)

И вообще, на 11 винде как-то не стабильно работает гта

writeline
05.09.2025, 01:49
Столкнулся с такой проблемой, что на Windows 11 32-х битной структуры плагины не запускаются (ну когда x86 выбираешь в Visual Studio)
И вообще, на 11 винде как-то не стабильно работает гта


на 11 винде проблема с путями.

Если же на той же 10й винде ты указываешь путь в плагине \\models\\gta3.img, то на 11 винде уже нужен полный путь: С:\\GTA San Andreas\\models\\gta3.img.

По крайней мере у меня были такие траблы на 11, только из-за этого ушёл обратно на 10ку.



При запуске предлагает выбрать монитор и разрешение, как можно перехватить это окно выбора и изменить, картинку там добавить или текст какой то?
Через IDA смотрел не нашёл по strings ничего подобного.


Сделал.

https://forum.antichat.xyz/attachments/28634178/

DaniilPovetkin
05.09.2025, 20:08
Сделал.


Как удалось?

writeline
06.09.2025, 01:48
Как удалось?


В потоке изменил, через опрос (polling)

swlm
12.09.2025, 19:26
Есть одна очень бесячая проблема - при частом ALT + TAB без плагина III.VC.SA.WindowedMode игра в какой-то момент перестаёт разворачиваться, есть ли 100% гарантированный фикс этой проблемы?

И есть какая-то стабильная версия DirectX-9? Потому-что какие-то скрипты ведут себя очень странно на других компьютерах, ну например у меня всё отлично, а у других случаются какие-то краши, хотя у всех все те-же плагины, а происходит иногда какая-то дичь...

moreveal
12.09.2025, 21:33
нопать в samp.dll от 100C612E до 100C6218


:/

r1: [714EF] = 0x31

r3: [753F7] = 0x31

swlm
12.09.2025, 23:58
Почему-то Object 0 is valid не выводится, но по сути должно же..

Я что-то упустил?

C++:






typedef
void
*
*
samp_objects_array
;
typedef
uintptr_t
*
samp_objects_pool
;
typedef
void
*
samp_object_ptr
;
samp_objects_array CMultiplayer
::
GetSampObjects
(
)
{
DWORD sampDLL
=
(
DWORD
)
GetModuleHandleA
(
"samp.dll"
)
;
if
(
!
sampDLL
)
return
nullptr
;
DWORD sampInfo
=
*
(
DWORD
*
)
(
sampDLL
+
0x26E8DC
)
;
if
(
!
sampInfo
)
return
nullptr
;
DWORD pPools
=
*
(
DWORD
*
)
(
sampInfo
+
0x3DE
)
;
if
(
!
pPools
)
return
nullptr
;
DWORD pObjectPool
=
*
(
DWORD
*
)
(
pPools
+
0x14
)
;
if
(
!
pObjectPool
)
return
nullptr
;
void
*
*
objects_array
=
reinterpret_cast

(
pObjectPool
+
0xFA4
)
;
return
objects_array
;
}
samp_objects_array objects_array
=
CMultiplayer
::
GetSampObjects
(
)
;
if
(
objects_array
!=
nullptr
)
{
samp_object_ptr object
=
objects_array
[
0
]
;
if
(
object
!=
nullptr
)
{
printf
(
"Object 0 is valid!\n"
)
;
}
}

leqwe
13.09.2025, 18:00
помогите с моей функцией mark target, она работает, но при нажатии пкм таргет рисуется на миллисекунду и сразу исчезает:

C++:






if
(
gMarkTarget
&&
sCurrent
.
gamePed
)
{
sAimHudTick
=
GetTickCount64
(
)
;
auto
*
net
=
sampapi
::
v037r1
::
RefNetGame
(
)
;
if
(
net
&&
net
->
GetPlayerPool
(
)
)
{
auto
*
lp
=
net
->
GetPlayerPool
(
)
->
GetLocalPlayer
(
)
;
if
(
lp
)
{
if
(
sCurrent
.
sampPlayerId
>=
0
)
lp
->
m_cameraTarget
.
m_nPlayer
=
(
unsigned
short
)
sCurrent
.
sampPlayerId
;
*
reinterpret_cast

(
*
reinterpret_cast

(
0xB6F5F0
)
+
0x79C
)
=
sCurrent
.
gamePed
;
}
}
}

swlm
13.09.2025, 18:55
помогите с моей функцией mark target, она работает, но при нажатии пкм таргет рисуется на миллисекунду и сразу исчезает:

C++:






if
(
gMarkTarget
&&
sCurrent
.
gamePed
)
{
sAimHudTick
=
GetTickCount64
(
)
;
auto
*
net
=
sampapi
::
v037r1
::
RefNetGame
(
)
;
if
(
net
&&
net
->
GetPlayerPool
(
)
)
{
auto
*
lp
=
net
->
GetPlayerPool
(
)
->
GetLocalPlayer
(
)
;
if
(
lp
)
{
if
(
sCurrent
.
sampPlayerId
>=
0
)
lp
->
m_cameraTarget
.
m_nPlayer
=
(
unsigned
short
)
sCurrent
.
sampPlayerId
;
*
reinterpret_cast

(
*
reinterpret_cast

(
0xB6F5F0
)
+
0x79C
)
=
sCurrent
.
gamePed
;
}
}
}





так в цикл закинь игровой, game_loop

leqwe
13.09.2025, 19:10
так в цикл закинь игровой, game_loop


не помогло

writeline
16.09.2025, 21:49
Пробую изменить размеры радара, при открытии сцены игры крашит, в чём может быть проблема? 🧐

с++:






const
float
RadarWidth
=
1.8f
;
// NewWidth
const
float
RadarHeight
=
1.8f
;
// NewHeight
template

bool
SafeWrite
(
void
*
address
,
T value
)
{
DWORD oldProtect
;
if
(
VirtualProtect
(
address
,
sizeof
(
T
)
,
PAGE_EXECUTE_READWRITE
,
&
oldProtect
)
)
{
*
reinterpret_cast

(
address
)
=
value
;
VirtualProtect
(
address
,
sizeof
(
T
)
,
oldProtect
,
&
oldProtect
)
;
return
true
;
}
return
false
;
}
void
SetRadarSize
(
)
{
//height
uintptr_t widthAddresses
[
]
=
{
0x5834C2
,
0x58A449
,
0x58A7E9
,
0x58A840
,
0x58A943
,
0x58A99D
}
;
for
(
auto
addr
:
widthAddresses
)
SafeWrite

(
reinterpret_cast

(
addr
)
,
RadarWidth
)
;
//width
uintptr_t heightAddresses
[
]
=
{
0x58A47D
,
0x58A632
,
0x58A6AB
,
0x58A70E
,
0x58A801
,
0x58A8AB
,
0x58A921
,
0x58A9D5
,
0x5834F6
}
;
for
(
auto
addr
:
heightAddresses
)
SafeWrite

(
reinterpret_cast

(
addr
)
,
RadarHeight
)
;
}






Крашит как только должен появится радар

Winstаl
17.09.2025, 20:34
Пробую изменить размеры радара, при открытии сцены игры крашит, в чём может быть проблема? 🧐

с++:






const
float
RadarWidth
=
1.8f
;
// NewWidth
const
float
RadarHeight
=
1.8f
;
// NewHeight
template

bool
SafeWrite
(
void
*
address
,
T value
)
{
DWORD oldProtect
;
if
(
VirtualProtect
(
address
,
sizeof
(
T
)
,
PAGE_EXECUTE_READWRITE
,
&
oldProtect
)
)
{
*
reinterpret_cast

(
address
)
=
value
;
VirtualProtect
(
address
,
sizeof
(
T
)
,
oldProtect
,
&
oldProtect
)
;
return
true
;
}
return
false
;
}
void
SetRadarSize
(
)
{
//height
uintptr_t widthAddresses
[
]
=
{
0x5834C2
,
0x58A449
,
0x58A7E9
,
0x58A840
,
0x58A943
,
0x58A99D
}
;
for
(
auto
addr
:
widthAddresses
)
SafeWrite

(
reinterpret_cast

(
addr
)
,
RadarWidth
)
;
//width
uintptr_t heightAddresses
[
]
=
{
0x58A47D
,
0x58A632
,
0x58A6AB
,
0x58A70E
,
0x58A801
,
0x58A8AB
,
0x58A921
,
0x58A9D5
,
0x5834F6
}
;
for
(
auto
addr
:
heightAddresses
)
SafeWrite

(
reinterpret_cast

(
addr
)
,
RadarHeight
)
;
}





Крашит как только должен появится радар


Ты указатель на переменные должен передавать, а не их значение, вроде как.

zytrix
19.09.2025, 20:46
как именно в сампе работает сериализация пакетов?(acks если быть точным)

0xff65
19.09.2025, 23:50
Приветствую, каким образом можно реализовать что бы цикл повторялся не бесконечно, а не более 2 раз? - при нажатии на кнопку 50

C++:






#include "plugin.h"
#include "CWorld.h"
#include "CCamera.h"
#include "extensions/ScriptCommands.h"
using
namespace
plugin
;
class
Project5
{
public
:
std
::
unordered_map
>
vKeys
=
{
{
49
,
{
31
,
30
}
}
,
{
50
,
{
22
,
23
,
24
}
}
,
{
51
,
{
25
,
27
,
26
}
}
,
{
52
,
{
29
}
}
,
{
53
,
{
34
,
33
}
}
}
;
Project5
(
)
{
Events
::
drawingEvent
+=
[
this
]
{
if
(
!
isPlayerPlaying
(
)
||
isInputActive
(
)
)
return
;
for
(
const
auto
&
[
key
,
weapons
]
:
vKeys
)
{
if
(
KeyPressed
(
key
)
)
{
printf
(
"Key: %d\n"
,
key
)
;
CPed
*
pPed
=
CWorld
::
Players
[
CWorld
::
PlayerInFocus
]
.
m_pPed
;
std
::
uint32_t
nHandle
=
CPools
::
GetPedRef
(
pPed
)
;
for
(
std
::
uint8_t
nWeapon
:
weapons
)
{
printf
(
"Weapon: %d\n"
,
nWeapon
)
;
if
(
Command

(
nHandle
,
nWeapon
)
)
{
Command

(
nHandle
,
0
)
;
Command

(
nHandle
,
nWeapon
)
;
break
;
}
}
}
}
}
;
}
bool
isPlayerPlaying
(
)
{
return
CWorld
::
Players
[
CWorld
::
PlayerInFocus
]
.
m_pPed
!=
nullptr
;
}
bool
isInputActive
(
)
{
CPed
*
pPed
=
CWorld
::
Players
[
CWorld
::
PlayerInFocus
]
.
m_pPed
;
return
(
pPed
&&
pPed
->
m_pVehicle
)
;
}
}
Project5Plugin
;

Wowisky
20.09.2025, 03:21
Hello, how can I make the cycle repeat no more than 2 times, rather than infinitely? - when I press button 50


int count = 0;

if (count > 2) return;

if(key == 50)

count++;

0x9
20.09.2025, 21:44
появилась необходимось хука объектов но стандартный хук плагин сдк не работает

Код:





[CODE]
plugin::Events::objectRenderEvent.before += [](CEntity* o) {
cout



в консоль попросту не выводятся объекты

MSIshka
24.09.2025, 20:38
Почему не срабатывает хук чата?

C++:






using
ChatFunc_t
=
void
(
__thiscall
*
)
(
void
*
thisptr
,
uint32_t
type
,
const
char
*
text
,
const
char
*
prefix
,
uint32_t
color
,
uint32_t
pcolor
)
;
ChatFunc_t g_origChatFunc
=
nullptr
;
void
__fastcall
ChatDetour
(
void
*
thisptr
,
void
*
edx
,
uint32_t
type
,
const
char
*
text
,
const
char
*
prefix
,
uint32_t
color
,
uint32_t
pcolor
)
{
std
::
string texta
=
text
?
text
:
""
;
std
::
string prefixa
=
prefix
?
prefix
:
""
;
bool
shouldHide
=
ProcessSpecialMessage
(
texta
)
;
if
(
!
shouldHide
)
{
std
::
string colorHex
=
ARGBtoRGB
(
color
)
;
if
(
type
==
2
)
{
std
::
string prefixColorHex
=
ARGBtoRGB
(
pcolor
)
;
texta
=
"{"
+
prefixColorHex
+
"}"
+
prefixa
+
" {"
+
colorHex
+
"}"
+
texta
;
}
std
::
string finalMessage
=
"{"
+
colorHex
+
"}"
+
GetCurrentTimeString
(
)
+
" "
+
texta
;
ExecuteJSOnCEF
(
finalMessage
)
;
}
if
(
g_origChatFunc
)
g_origChatFunc
(
thisptr
,
type
,
text
,
prefix
,
color
,
pcolor
)
;
}
bool
InstallChatHook
(
)
{
HMODULE samp
=
GetModuleHandleA
(
"samp.dll"
)
;
uintptr_t addr
=
reinterpret_cast

(
samp
)
+
0x64010
;
if
(
MH_CreateHook
(
reinterpret_cast

(
addr
)
,
&
ChatDetour
,
reinterpret_cast

(
&
g_origChatFunc
)
)
!=
MH_OK
)
return
false
;
if
(
MH_EnableHook
(
reinterpret_cast

(
addr
)
)
!=
MH_OK
)
return
false
;
return
true
;
}
void
__fastcall
ActivateChatBlocker
(
void
*
thisptr
)
{
return
;
}
bool
InstallActivateChatHook
(
)
{
HMODULE samp
=
GetModuleHandleA
(
"samp.dll"
)
;
if
(
!
samp
)
return
false
;
uintptr_t addr
=
reinterpret_cast

(
samp
)
+
0x657E0
;
if
(
MH_CreateHook
(
reinterpret_cast

(
addr
)
,
reinterpret_cast

(
&
ActivateChatBlocker
)
,
nullptr
)
!=
MH_OK
)
return
false
;
return
MH_EnableHook
(
reinterpret_cast

(
addr
)
)
==
MH_OK
;
}
DWORD WINAPI
PluginThread
(
LPVOID
)
{
while
(
!
GetModuleHandleA
(
"samp.dll"
)
)
{
Sleep
(
100
)
;
}
LoadSettings
(
)
;
if
(
MH_Initialize
(
)
!=
MH_OK
)
{
OutputDebugStringA
(
"MinHook init failed\n"
)
;
return
1
;
}
if
(
!
InstallChatHook
(
)
)
{
OutputDebugStringA
(
"Chat hook failed\n"
)
;
}
if
(
!
InstallActivateChatHook
(
)
)
{
OutputDebugStringA
(
"Activate chat hook failed\n"
)
;
}
MH_Uninitialize
(
)
;
return
0
;
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD ul_reason_for_call
,
LPVOID lpReserved
)
{
switch
(
ul_reason_for_call
)
{
case
DLL_PROCESS_ATTACH
:
DisableThreadLibraryCalls
(
hModule
)
;
CreateThread
(
nullptr
,
0
,
PluginThread
,
nullptr
,
0
,
nullptr
)
;
break
;
case
DLL_PROCESS_DETACH
:
g_running
=
false
;
break
;
}
return
TRUE
;
}

0xff65
24.09.2025, 22:16
int count = 0;

if (count > 2) return;
if(key == 50)
count++;


Не работает совсем

C++:






#include "plugin.h"
#include "CWorld.h"
#include "CCamera.h"
#include "extensions/ScriptCommands.h"
using
namespace
plugin
;
class
Project5
{
public
:
std
::
unordered_map
>
vKeys
=
{
{
49
,
{
31
,
30
}
}
,
{
50
,
{
22
,
23
,
24
}
}
,
{
51
,
{
25
,
27
,
26
}
}
,
{
52
,
{
29
}
}
,
{
53
,
{
34
,
33
}
}
}
;
int
count
=
0
;
Project5
(
)
{
Events
::
drawingEvent
+=
[
this
]
{
if
(
!
isPlayerPlaying
(
)
||
isInputActive
(
)
)
return
;
for
(
const
auto
&
[
key
,
weapons
]
:
vKeys
)
{
if
(
key
==
50
)
{
if
(
count
>
2
)
continue
;
if
(
KeyPressed
(
key
)
)
{
count
++
;
printf
(
"Key: %d\n"
,
key
)
;
CPed
*
pPed
=
CWorld
::
Players
[
CWorld
::
PlayerInFocus
]
.
m_pPed
;
std
::
uint32_t
nHandle
=
CPools
::
GetPedRef
(
pPed
)
;
for
(
std
::
uint8_t
nWeapon
:
weapons
)
{
printf
(
"Weapon: %d\n"
,
nWeapon
)
;
if
(
Command

(
nHandle
,
nWeapon
)
)
{
Command

(
nHandle
,
0
)
;
Command

(
nHandle
,
nWeapon
)
;
break
;
}
}
}
}
else
{
if
(
KeyPressed
(
key
)
)
{
printf
(
"Key: %d\n"
,
key
)
;
CPed
*
pPed
=
CWorld
::
Players
[
CWorld
::
PlayerInFocus
]
.
m_pPed
;
std
::
uint32_t
nHandle
=
CPools
::
GetPedRef
(
pPed
)
;
for
(
std
::
uint8_t
nWeapon
:
weapons
)
{
printf
(
"Weapon: %d\n"
,
nWeapon
)
;
if
(
Command

(
nHandle
,
nWeapon
)
)
{
Command

(
nHandle
,
0
)
;
Command

(
nHandle
,
nWeapon
)
;
break
;
}
}
}
}
}
}
;
}
bool
isPlayerPlaying
(
)
{
return
CWorld
::
Players
[
CWorld
::
PlayerInFocus
]
.
m_pPed
!=
nullptr
;
}
bool
isInputActive
(
)
{
CPed
*
pPed
=
CWorld
::
Players
[
CWorld
::
PlayerInFocus
]
.
m_pPed
;
return
(
pPed
&&
pPed
->
m_pVehicle
)
;
}
}
Project5Plugin
;

MSIshka
25.09.2025, 18:05
Почему вместо text отправляется @text (https://www.blast.hk/members/413442/)" ? Хотя через samp::RefChat()->AddMessage(0xFFFFFFFF, text.data()); отправляется всё нормально.

C++:





[CODE]
void
__stdcall
js_sendMessage
(
WebFrame frame
,
const
char
*
name
,
const
char
*
*
argv
,
int
argc
)
{
if
(
!
argv
||
argc





Как с помощью samp api использовать sampProcessChatInput?

kishemishe
26.09.2025, 11:34
Как сделать табы (вкладки) в ImGui? Я делаю свой чит на кс2 на c++, считай только учусь, пока что делаю гуи и остановился на том когда нужно было сделать табы, мне нужно чтобы можно было менять и их размер, и их расположение, и шрифт текста в нем

tanksoftik
27.09.2025, 13:13
Как сделать табы (вкладки) в ImGui? Я делаю свой чит на кс2 на c++, считай только учусь, пока что делаю гуи и остановился на том когда нужно было сделать табы, мне нужно чтобы можно было менять и их размер, и их расположение, и шрифт текста в нем



C++:






int
tabb
=
0
;
ImGui
::
Begin
(
"##1"
,
0
)
if
(
ImGui
::
Button
(
u8
"player"
,
ImVec2
(
SizeX
,
SizeY
)
)
)
{
tabb
=
0
;
}
ImGui
::
PushFont
(
fontname
)
;
if
(
ImGui
::
Button
(
u8
"veh"
,
ImVec2
(
SizeX
,
SizeY
)
)
)
{
tabb
=
1
;
}
ImGui
::
PopFont
(
)
;
if
(
tabb
==
0
)
{
ImGui
::
Text
(
"open tab: player"
)
;
}
else
if
(
tabb
==
1
)
{
ImGui
::
Text
(
"open tab
:
veh
)
;
}
ImGui
::
End
(
)
;

AdCKuY_DpO4uLa
27.09.2025, 15:27
че делать, я юзаю https://github.com/DpO4uLa/SAMP_API если на р1 то все заебись, а если переключу на р3 то крашит при

SAMP::CallBacks::pCallBackRegister->RegisterRakClientCallback(RakClientRecvHook);//registed RakClient Recv Hook
SAMP::CallBacks::pCallBackRegister->RegisterRakClientCallback(RakClientRPCHook);//registed RakClient RPC Hook

и при SAMP::pSAMP->getRakNet()->EmulPacket

хотя остальное работает нормально


Это очень старая поеботина, тогда уже лучше https://github.com/DpO4uLa/samp_sdk

vmprotect
28.09.2025, 11:05
как на клиенте получать входящие и исходящие пакеты ?

s.fridom
29.09.2025, 12:00
как можно анимировать текстуры? например смена цвет градиентом

вайега52
29.09.2025, 15:14
как можно анимировать текстуры? например смена цвет градиентом



ASI - AnimatedTextures (https://www.blast.hk/threads/95231)

Астрологи объявили неделю гифок Плагин позволяет заменить любую игровую текстуру гифкой. Просто называете гифку так же, как называется в игре текстура и все. Например fist.gif для замены кулака. Если гифка отображается не так, как вы хотели, то ее можно подтюнить, создав файл с таким же...

www.blast.hk


Это если речь идет про анимацию на уровне картинок (GIF довольно таки тяжелый, кстати, но для того, чтобры разобраться. пойдет). В других же случаях либо на CPU генерируешь пиксели для RwTexture->raster, либо пытаешься прикрутить шейдеры и вычислять тот же градиент на GPU

AdCKuY_DpO4uLa
03.10.2025, 20:34
Решил я, с великого и неповторимого ассемблера, с целью интереса перейти на время на Си
Программа простая
1) Подключаб user32.dll
2) Вызываю оттуда функцию MessageBoxA чтобы вывести на экран сообщение
3) Выделяю виртуальную память в размере 256 байт
4) Создаю указатели типа char, передаю туда байты
5) Использую strcpy с целью заполнения значениями функцию MessageBoxA, чтобы на экране вывело:
Заголовок: ShellCode Works
А текст: test

А далее уже идет сам шеллкод, с ним вроде с норм, основная проблема заключается хер пойми в чем
Сам код:

С:






#include
#include
int
main
(
)
{
HMODULE hUser32
=
LoadLibraryA
(
"user32.dll"
)
;
FARPROC pMessageBoxA
=
GetProcAddress
(
hUser32
,
"MessageBoxA"
)
;
printf
(
"MessageBoxA address: 0x%p\n"
,
pMessageBoxA
)
;
PVOID pMemory
=
VirtualAlloc
(
NULL
,
256
,
MEM_COMMIT
,
PAGE_EXECUTE_READWRITE
)
;
char
*
caption
=
(
char
*
)
pMemory
+
100
;
char
*
text
=
(
char
*
)
pMemory
+
120
;
strcpy
(
caption
,
"Shellcode Works!"
)
;
strcpy
(
text
,
"test"
)
;
unsigned
char
shellcode
[
50
]
;
int
pos
=
0
;
shellcode
[
pos
++
]
=
0x6A
;
shellcode
[
pos
++
]
=
0x00
;
shellcode
[
pos
++
]
=
0x68
;
memcpy
(
shellcode
+
pos
,
&
caption
,
4
)
;
pos
+=
4
;
shellcode
[
pos
++
]
=
0x68
;
memcpy
(
shellcode
+
pos
,
&
text
,
4
)
;
pos
+=
4
;
shellcode
[
pos
++
]
=
0x6A
;
shellcode
[
pos
++
]
=
0x00
;
// тут вызываю messagebox
shellcode
[
pos
++
]
=
0xB8
;
memcpy
(
shellcode
+
pos
,
&
pMessageBoxA
,
4
)
;
pos
+=
4
;
// call eax
shellcode
[
pos
++
]
=
0xFF
;
shellcode
[
pos
++
]
=
0xD0
;
// ret
shellcode
[
pos
++
]
=
0xC3
;
memcpy
(
pMemory
,
shellcode
,
pos
)
;
HANDLE hThread
=
CreateThread
(
NULL
,
0
,
(
LPTHREAD_START_ROUTINE
)
pMemory
,
NULL
,
0
,
NULL
)
;
if
(
hThread
)
{
WaitForSingleObject
(
hThread
,
INFINITE
)
;
CloseHandle
(
hThread
)
;
printf
(
"Shellcode executed successfully\n"
)
;
}
VirtualFree
(
pMemory
,
0
,
MEM_RELEASE
)
;
FreeLibrary
(
hUser32
)
;
return
0
;
}




Ошибка:

Я пытался через memcpy передать значения для MessageBox, не помогло

Шатал я ваши языки выше асма)



C++:






// Перед подключением всех заголовков / инклюдов
#define _CRT_SECURE_NO_WARNINGS




Либо используй безопасные функции

AdCKuY_DpO4uLa
06.10.2025, 16:24
У меня есть некие скопированные данные, как сделать так чтобы эти данные отправлялись моему боту в тг по апи его?
Я пытался через winhttp, но чет не работает.
На Си


Жески тип, юзай плюсы https://github.com/reo7sp/tgbotcpp

Весь остальной код можешь писать на си, компилятор спокойно сожрет

вайега52
06.10.2025, 18:13
winhttp


Мужики все делают на TCP 😎

AdCKuY_DpO4uLa
06.10.2025, 18:27
Мужики все делают на TCP 😎


Тогда уж на curl + openssl писать, как раз под си, но все апи придется самому реализовывать, параллельно читая доку к бот апи тг. Как по мне, легче взять готовое, отработанное решение, чем городить лясопеды

0xff65
08.11.2025, 00:34
Приветствую, пытаюсь собрать загрузчик состоящих из двух частей - серверной и клиентской, с клиентской стороны все нормально клиент лоадер собран, а вот с серверной возникли проблемы, собрал директорию с помощью cmake, далее пытался собрать sln решение, но как мне подсказал интернет оно написано для linux -

C++:






#include
#include
#include
#include
#include
#include




Как мне быть? Скачать образ и накатить на виртуальную машину? Или собрать через Windows Subsystem for Linux? Какого формата будет скомпилированный файл и как его запустить на локалке?

Или я движусь совсем не в том направлении? Типо как мне собрать sln файл на линукс (этого я не понимаю) если там 2к ошибок, что-то не так явно

Сурс (https://github.com/EquiNoxAdv/loader-master)

AdCKuY_DpO4uLa
08.11.2025, 20:04
Приветствую, пытаюсь собрать загрузчик состоящих из двух частей - серверной и клиентской, с клиентской стороны все нормально клиент лоадер собран, а вот с серверной возникли проблемы, собрал директорию с помощью cmake, далее пытался собрать sln решение, но как мне подсказал интернет оно написано для linux -

C++:






#include
#include
#include
#include
#include
#include




Как мне быть? Скачать образ и накатить на виртуальную машину? Или собрать через Windows Subsystem for Linux? Какого формата будет скомпилированный файл и как его запустить на локалке?

Или я движусь совсем не в том направлении? Типо как мне собрать sln файл на линукс (этого я не понимаю) если там 2к ошибок, что-то не так явно

Сурс (https://github.com/EquiNoxAdv/loader-master)


Все инструкции есть в репозитории. Ставь WSL с ubuntu какой-нибудь и на ней собирай

fuldic
15.11.2025, 12:34
Скиньте основу ASI плагина для Visual Studio

malonex
17.11.2025, 06:06
Как проверить, была ли отпущена определённая клавиша? Например: wasKeyReleased(vkeys.VK_RBUTTON)

вайега52
17.11.2025, 08:33
Как проверить, была ли отпущена определённая клавиша? Например: wasKeyReleased(vkeys.VK_RBUTTON)


Хук на WndProc

yorenov
26.11.2025, 16:00
Альт как прожать? Так не воркает:

С++:






RakNet
::
BitStream bs
;
bs
.
ResetWritePointer
(
)
;
Synchronization
::
OnfootData onfootData
{
}
;
std
::
memcpy
(
&
onfootData
,
&
RefNetGame
(
)
->
GetPlayerPool
(
)
->
GetLocalPlayer
(
)
->
m_onfootData
,
sizeof
(
Synchronization
::
OnfootData
)
)
;
onfootData
.
m_controllerState
.
m_bPedWalk
=
1
;
onfootData
.
m_controllerState
.
m_value
=
static_cast

(
1024
)
;
bs
.
Write
(
static_cast

(
ID_PLAYER_SYNC
)
)
;
bs
.
Write
(
reinterpret_cast

(
&
onfootData
)
,
sizeof
(
Synchronization
::
OnfootData
)
)
;
rakhook
::
send
(
&
bs
,
HIGH_PRIORITY
,
RELIABLE_SEQUENCED
,
1
)
;
onfootData
.
m_controllerState
.
m_bPedWalk
=
0
;
onfootData
.
m_controllerState
.
m_value
=
static_cast

(
0
)
;
bs
.
Write
(
static_cast

(
ID_PLAYER_SYNC
)
)
;
bs
.
Write
(
reinterpret_cast

(
&
onfootData
)
,
sizeof
(
Synchronization
::
OnfootData
)
)
;
rakhook
::
send
(
&
bs
,
HIGH_PRIORITY
,
RELIABLE_SEQUENCED
,
1
)
;




А так прожимает только 1 раз + ко всему - костыль

C++:






input
[
0
]
.
type
=
INPUT_KEYBOARD
;
input
[
0
]
.
ki
.
wVk
=
0
;
input
[
0
]
.
ki
.
dwFlags
=
KEYEVENTF_SCANCODE
;
input
[
0
]
.
ki
.
wScan
=
0x38
;
input
[
1
]
.
type
=
INPUT_KEYBOARD
;
input
[
1
]
.
ki
.
wVk
=
0
;
input
[
1
]
.
ki
.
dwFlags
=
KEYEVENTF_SCANCODE
|
KEYEVENTF_KEYUP
;
input
[
1
]
.
ki
.
wScan
=
0x38
;
SendInput
(
2
,
input
,
sizeof
(
INPUT
)
)
;

undefine
26.11.2025, 17:03
Альт как прожать? Так не воркает:

С++:






RakNet
::
BitStream bs
;
bs
.
ResetWritePointer
(
)
;
Synchronization
::
OnfootData onfootData
{
}
;
std
::
memcpy
(
&
onfootData
,
&
RefNetGame
(
)
->
GetPlayerPool
(
)
->
GetLocalPlayer
(
)
->
m_onfootData
,
sizeof
(
Synchronization
::
OnfootData
)
)
;
onfootData
.
m_controllerState
.
m_bPedWalk
=
1
;
onfootData
.
m_controllerState
.
m_value
=
static_cast

(
1024
)
;
bs
.
Write
(
static_cast

(
ID_PLAYER_SYNC
)
)
;
bs
.
Write
(
reinterpret_cast

(
&
onfootData
)
,
sizeof
(
Synchronization
::
OnfootData
)
)
;
rakhook
::
send
(
&
bs
,
HIGH_PRIORITY
,
RELIABLE_SEQUENCED
,
1
)
;
onfootData
.
m_controllerState
.
m_bPedWalk
=
0
;
onfootData
.
m_controllerState
.
m_value
=
static_cast

(
0
)
;
bs
.
Write
(
static_cast

(
ID_PLAYER_SYNC
)
)
;
bs
.
Write
(
reinterpret_cast

(
&
onfootData
)
,
sizeof
(
Synchronization
::
OnfootData
)
)
;
rakhook
::
send
(
&
bs
,
HIGH_PRIORITY
,
RELIABLE_SEQUENCED
,
1
)
;




А так прожимает только 1 раз + ко всему - костыль

C++:






input
[
0
]
.
type
=
INPUT_KEYBOARD
;
input
[
0
]
.
ki
.
wVk
=
0
;
input
[
0
]
.
ki
.
dwFlags
=
KEYEVENTF_SCANCODE
;
input
[
0
]
.
ki
.
wScan
=
0x38
;
input
[
1
]
.
type
=
INPUT_KEYBOARD
;
input
[
1
]
.
ki
.
wVk
=
0
;
input
[
1
]
.
ki
.
dwFlags
=
KEYEVENTF_SCANCODE
|
KEYEVENTF_KEYUP
;
input
[
1
]
.
ki
.
wScan
=
0x38
;
SendInput
(
2
,
input
,
sizeof
(
INPUT
)
)
;





ратку опять кинь, прожмется алт

yorenov
26.11.2025, 17:17
ратку опять кинь


Какую ратку?

undefine
26.11.2025, 18:13
Какую ратку?


забыл? тебе в тг написали ты кинул свой твинк и с него типу ратку кинули

yorenov
27.11.2025, 03:45
забыл? тебе в тг написали ты кинул свой твинк и с него типу ратку кинули


В тему с заказами зайди, там много весело "неактуально", а потом - я сменил ТГ юз, ушел в работу в реальной жизни. ТГ юз занял идиот который заскамил типов, попросив обратно ТГ юз - он отказал. В итоге скамит и по сей день, к этому я не имею никакого отношения



Альт как прожать? Так не воркает:

С++:






RakNet
::
BitStream bs
;
bs
.
ResetWritePointer
(
)
;
Synchronization
::
OnfootData onfootData
{
}
;
std
::
memcpy
(
&
onfootData
,
&
RefNetGame
(
)
->
GetPlayerPool
(
)
->
GetLocalPlayer
(
)
->
m_onfootData
,
sizeof
(
Synchronization
::
OnfootData
)
)
;
onfootData
.
m_controllerState
.
m_bPedWalk
=
1
;
onfootData
.
m_controllerState
.
m_value
=
static_cast

(
1024
)
;
bs
.
Write
(
static_cast

(
ID_PLAYER_SYNC
)
)
;
bs
.
Write
(
reinterpret_cast

(
&
onfootData
)
,
sizeof
(
Synchronization
::
OnfootData
)
)
;
rakhook
::
send
(
&
bs
,
HIGH_PRIORITY
,
RELIABLE_SEQUENCED
,
1
)
;
onfootData
.
m_controllerState
.
m_bPedWalk
=
0
;
onfootData
.
m_controllerState
.
m_value
=
static_cast

(
0
)
;
bs
.
Write
(
static_cast

(
ID_PLAYER_SYNC
)
)
;
bs
.
Write
(
reinterpret_cast

(
&
onfootData
)
,
sizeof
(
Synchronization
::
OnfootData
)
)
;
rakhook
::
send
(
&
bs
,
HIGH_PRIORITY
,
RELIABLE_SEQUENCED
,
1
)
;




А так прожимает только 1 раз + ко всему - костыль

C++:






input
[
0
]
.
type
=
INPUT_KEYBOARD
;
input
[
0
]
.
ki
.
wVk
=
0
;
input
[
0
]
.
ki
.
dwFlags
=
KEYEVENTF_SCANCODE
;
input
[
0
]
.
ki
.
wScan
=
0x38
;
input
[
1
]
.
type
=
INPUT_KEYBOARD
;
input
[
1
]
.
ki
.
wVk
=
0
;
input
[
1
]
.
ki
.
dwFlags
=
KEYEVENTF_SCANCODE
|
KEYEVENTF_KEYUP
;
input
[
1
]
.
ki
.
wScan
=
0x38
;
SendInput
(
2
,
input
,
sizeof
(
INPUT
)
)
;





Актуально, парни, помогите кликнуть злой альт на Радмире. 215 пакет не отправляется от клиента (при нажатии альта его просто нет - вход в квартиру)

yorenov
30.11.2025, 18:18
Альт как прожать? Так не воркает:

С++:






RakNet
::
BitStream bs
;
bs
.
ResetWritePointer
(
)
;
Synchronization
::
OnfootData onfootData
{
}
;
std
::
memcpy
(
&
onfootData
,
&
RefNetGame
(
)
->
GetPlayerPool
(
)
->
GetLocalPlayer
(
)
->
m_onfootData
,
sizeof
(
Synchronization
::
OnfootData
)
)
;
onfootData
.
m_controllerState
.
m_bPedWalk
=
1
;
onfootData
.
m_controllerState
.
m_value
=
static_cast

(
1024
)
;
bs
.
Write
(
static_cast

(
ID_PLAYER_SYNC
)
)
;
bs
.
Write
(
reinterpret_cast

(
&
onfootData
)
,
sizeof
(
Synchronization
::
OnfootData
)
)
;
rakhook
::
send
(
&
bs
,
HIGH_PRIORITY
,
RELIABLE_SEQUENCED
,
1
)
;
onfootData
.
m_controllerState
.
m_bPedWalk
=
0
;
onfootData
.
m_controllerState
.
m_value
=
static_cast

(
0
)
;
bs
.
Write
(
static_cast

(
ID_PLAYER_SYNC
)
)
;
bs
.
Write
(
reinterpret_cast

(
&
onfootData
)
,
sizeof
(
Synchronization
::
OnfootData
)
)
;
rakhook
::
send
(
&
bs
,
HIGH_PRIORITY
,
RELIABLE_SEQUENCED
,
1
)
;




А так прожимает только 1 раз + ко всему - костыль

C++:






input
[
0
]
.
type
=
INPUT_KEYBOARD
;
input
[
0
]
.
ki
.
wVk
=
0
;
input
[
0
]
.
ki
.
dwFlags
=
KEYEVENTF_SCANCODE
;
input
[
0
]
.
ki
.
wScan
=
0x38
;
input
[
1
]
.
type
=
INPUT_KEYBOARD
;
input
[
1
]
.
ki
.
wVk
=
0
;
input
[
1
]
.
ki
.
dwFlags
=
KEYEVENTF_SCANCODE
|
KEYEVENTF_KEYUP
;
input
[
1
]
.
ki
.
wScan
=
0x38
;
SendInput
(
2
,
input
,
sizeof
(
INPUT
)
)
;





Актуально, как на синхре прожимать альт? Или я что то не так делаю? Вроде же m_value - это specialKey?



Актуально, как на синхре прожимать альт? Или я что то не так делаю? Вроде же m_value - это specialKey?


m_value - short (16 бит), а я кастил к uint8_t, т.е.

1024 (0x0400) превращался в 0 у меня (низкий байт), и в итоге бит вообще не ставится))) + Я перезатирал все остальные клавиши, вместо того, чтобы просто добавить бит walk)

undefine
04.12.2025, 20:11
какая функция в гта отвечает за рендер build-object? типо пробывал CEntity::Render оно онли игроков с машинами, или же при

C++:






for
(
int
i
=
0
;
i

m_nSize
;
i
++
)
{
CBuilding
*
obj
=
objectsPool
->
GetAt
(
i
)
;
}
static
RpAtomic
*
atomic_callback
(
RpAtomic
*
atomic
,
void
*
obj
)
{
if
(
atomic
->
geometry
)
{
atomic
->
geometry
->
flags
|=
rpGEOMETRYMODULATEMATERIALCOLOR
;
RpGeometryForAllMaterials
(
atomic
->
geometry
,
material_callback
,
obj
)
;
}
return
atomic
;
}
static
RpMaterial
*
material_callback
(
RpMaterial
*
material
,
void
*
obj
)
{
if
(
!
material
||
!
material
->
texture
)
return
material
;
material
->
color
.
blue
=
255
;
material
->
color
.
red
=
0
;
material
->
color
.
green
=
0
;
return
material
;
}




и при попытке передать в atomic_callback крашит

вайега52
04.12.2025, 21:10
какая функция в гта отвечает за рендер build-object? типо пробывал CEntity::Render оно онли игроков с машинами, или же при

C++:






for
(
int
i
=
0
;
i

m_nSize
;
i
++
)
{
CBuilding
*
obj
=
objectsPool
->
GetAt
(
i
)
;
}
static
RpAtomic
*
atomic_callback
(
RpAtomic
*
atomic
,
void
*
obj
)
{
if
(
atomic
->
geometry
)
{
atomic
->
geometry
->
flags
|=
rpGEOMETRYMODULATEMATERIALCOLOR
;
RpGeometryForAllMaterials
(
atomic
->
geometry
,
material_callback
,
obj
)
;
}
return
atomic
;
}
static
RpMaterial
*
material_callback
(
RpMaterial
*
material
,
void
*
obj
)
{
if
(
!
material
||
!
material
->
texture
)
return
material
;
material
->
color
.
blue
=
255
;
material
->
color
.
red
=
0
;
material
->
color
.
green
=
0
;
return
material
;
}




и при попытке передать в atomic_callback крашит


CCustomBuildingPipeline::CustomPipeAtomicSetup

Возможно оно

undefine
04.12.2025, 23:26
как поставить хук на функцию? не вызов функции, а на саму функцию

пытался так

C++:





[CODE]
typedef
void
(
__thiscall
*
CEntity_Render_t
)
(
CEntity
*
entity
)
;
CEntity_Render_t fpOriginalRender
;
void
*
Create_Hook
(
BYTE
*
src
,
const
BYTE
*
dst
,
const
int
len
)
{
BYTE
*
jmp
;
DWORD dwback
;
DWORD jumpto
,
newjump
;
VirtualProtect
(
src
,
len
,
PAGE_READWRITE
,
&
dwback
)
;
if
(
src
[
0
]
==
0xE9
)
{
jmp
=
(
BYTE
*
)
malloc
(
10
)
;
jumpto
=
(
*
(
DWORD
*
)
(
src
+
1
)
)
+
(
(
DWORD
)
src
)
+
5
;
newjump
=
(
jumpto
-
(
DWORD
)
(
jmp
+
5
)
)
;
jmp
[
0
]
=
0xE9
;
*
(
DWORD
*
)
(
jmp
+
1
)
=
newjump
;
jmp
+=
5
;
jmp
[
0
]
=
0xE9
;
*
(
DWORD
*
)
(
jmp
+
1
)
=
(
DWORD
)
(
src
-
jmp
)
;
}
else
{
jmp
=
(
BYTE
*
)
malloc
(
5
+
len
)
;
memcpy
(
jmp
,
src
,
len
)
;
jmp
+=
len
;
jmp
[
0
]
=
0xE9
;
*
(
DWORD
*
)
(
jmp
+
1
)
=
(
DWORD
)
(
src
+
len
-
jmp
)
-
5
;
}
src
[
0
]
=
0xE9
;
*
(
DWORD
*
)
(
src
+
1
)
=
(
DWORD
)
(
dst
-
src
)
-
5
;
for
(
int
i
=
5
;
i



но игра просто вылетала

AdCKuY_DpO4uLa
05.12.2025, 03:49
[QUOTE="undefine"]

как поставить хук на функцию? не вызов функции, а на саму функцию
пытался так

C++:





[CODE]
typedef
void
(
__thiscall
*
CEntity_Render_t
)
(
CEntity
*
entity
)
;
CEntity_Render_t fpOriginalRender
;
void
*
Create_Hook
(
BYTE
*
src
,
const
BYTE
*
dst
,
const
int
len
)
{
BYTE
*
jmp
;
DWORD dwback
;
DWORD jumpto
,
newjump
;
VirtualProtect
(
src
,
len
,
PAGE_READWRITE
,
&
dwback
)
;
if
(
src
[
0
]
==
0xE9
)
{
jmp
=
(
BYTE
*
)
malloc
(
10
)
;
jumpto
=
(
*
(
DWORD
*
)
(
src
+
1
)
)
+
(
(
DWORD
)
src
)
+
5
;
newjump
=
(
jumpto
-
(
DWORD
)
(
jmp
+
5
)
)
;
jmp
[
0
]
=
0xE9
;
*
(
DWORD
*
)
(
jmp
+
1
)
=
newjump
;
jmp
+=
5
;
jmp
[
0
]
=
0xE9
;
*
(
DWORD
*
)
(
jmp
+
1
)
=
(
DWORD
)
(
src
-
jmp
)
;
}
else
{
jmp
=
(
BYTE
*
)
malloc
(
5
+
len
)
;
memcpy
(
jmp
,
src
,
len
)
;
jmp
+=
len
;
jmp
[
0
]
=
0xE9
;
*
(
DWORD
*
)
(
jmp
+
1
)
=
(
DWORD
)
(
src
+
len
-
jmp
)
-
5
;
}
src
[
0
]
=
0xE9
;
*
(
DWORD
*
)
(
src
+
1
)
=
(
DWORD
)
(
dst
-
src
)
-
5
;
for
(
int
i
=
5
;
i

tylerwiller
08.12.2025, 05:43
Всем привет, я пытаюсь сделать Silent Aim с эффектом крови, как в этом видео (https://www.blast.hk/redirect/aHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g_dj1vTnFEVT F2WTIyQQ). У меня уже есть рабочий код Silent Aim, мне нужен только код эффекта крови. Может ли кто-нибудь помочь?

Loppyf
18.12.2025, 22:02
Как в API SAMP получить ID машины по ID игрока

undefine
21.12.2025, 18:35
Как в API SAMP получить ID машины по ID игрока


FindPlayerVechicle(playerid, true);

Wowisky
08.01.2026, 01:06
It's probably not really related to CPP but still, do you think there's a way to watch damage in the stream zone (like this https://www.blast.hk/threads/165373/) but in a lagcomp 0 server? It does rely in OnPlayerWeaponShot and it does only work in lagcomp 1 servers, maybe do you know any other trick or something? Or any idea? Client Side of course. Thanks!

swlm
11.02.2026, 15:34
Всем привет. Кто-то может знает, как сделать, чтобы позиция прикриплённого объекта была не статическая? А то например когда я приседаю, приатаченный объект не движется за игроком.

C++:






void
CWeaponSkins
::
AttachModelToPlayer
(
CPed
*
ped
,
short
weaponId
)
{
if
(
!
ped
)
return
;
if
(
!
m_WeaponSkins
[
ped
]
.
contains
(
weaponId
)
)
return
;
unsigned
short
skinModelId
=
m_WeaponSkins
[
ped
]
[
weaponId
]
;
CStreaming
::
RequestModel
(
skinModelId
,
0
)
;
CStreaming
::
LoadAllRequestedModels
(
false
)
;
CObject
*
obj
=
CObject
::
Create
(
skinModelId
)
;
if
(
!
obj
)
return
;
obj
->
SetIsStatic
(
true
)
;
obj
->
bIsVisible
=
true
;
obj
->
bAttachedToEntity
=
true
;
plugin
::
Command

(
obj
,
ped
,
0.05f
,
-
0.18f
,
-
0.25f
,
90.0f
,
0.0f
,
185.0f
)
;
}

vmprotect
19.02.2026, 23:33
Какая функция отвечает за остановку неона на машину? Как это происходит

swlm
20.02.2026, 00:32
Какая функция отвечает за остановку неона на машину? Как это происходит


из коробки в гта вообще не продумывали неон, никакой функции нету

Nymphomaniac
20.02.2026, 00:49
Всем привет. Кто-то может знает, как сделать, чтобы позиция прикриплённого объекта была не статическая? А то например когда я приседаю, приатаченный объект не движется за игроком.

C++:






void
CWeaponSkins
::
AttachModelToPlayer
(
CPed
*
ped
,
short
weaponId
)
{
if
(
!
ped
)
return
;
if
(
!
m_WeaponSkins
[
ped
]
.
contains
(
weaponId
)
)
return
;
unsigned
short
skinModelId
=
m_WeaponSkins
[
ped
]
[
weaponId
]
;
CStreaming
::
RequestModel
(
skinModelId
,
0
)
;
CStreaming
::
LoadAllRequestedModels
(
false
)
;
CObject
*
obj
=
CObject
::
Create
(
skinModelId
)
;
if
(
!
obj
)
return
;
obj
->
SetIsStatic
(
true
)
;
obj
->
bIsVisible
=
true
;
obj
->
bAttachedToEntity
=
true
;
plugin
::
Command

(
obj
,
ped
,
0.05f
,
-
0.18f
,
-
0.25f
,
90.0f
,
0.0f
,
185.0f
)
;
}





obj->SetIsStatic(false); попробуй

vmprotect
20.02.2026, 13:12
Как правильно слать ракнет пакеты через битстрим в samp?

вайега52
20.02.2026, 14:06
Как правильно слать ракнет пакеты через битстрим в samp?



Исходник - RakHook 1.0-beta (https://www.blast.hk/threads/69666/)

RakHook - библиотека, которая добавляет события RakNet'a (входящие/исходящие пакеты и RPC), эмуляцию и отправку пакетов и RPC. Есть одновременная поддержка версий 0.3.7-R1, 0.3.7-R3-1, 0.3.7-R4 и 0.3DL-R1. Функции std::uintptr_t rakhook::samp_addr(std::uintptr_t offset = 0); // получить адрес...

www.blast.hk

vmprotect
20.02.2026, 14:16
Исходник - RakHook 1.0-beta (https://www.blast.hk/threads/69666/)

RakHook - библиотека, которая добавляет события RakNet'a (входящие/исходящие пакеты и RPC), эмуляцию и отправку пакетов и RPC. Есть одновременная поддержка версий 0.3.7-R1, 0.3.7-R3-1, 0.3.7-R4 и 0.3DL-R1. Функции std::uintptr_t rakhook::samp_addr(std::uintptr_t offset = 0); // получить адрес...

www.blast.hk



Мне на сервер именно нужно , через плагин под сервер

0xff65
02.03.2026, 17:26
Приветствую, есть у кого эти оффесты на r3-0?

C++:






// unknown, r1, r2, r3-1, r4, r5
define_offset
(
Info
,
0
,
0x21A0F8
,
0x21A100
,
0x26E8DC
,
0x26EA0C
,
0x26EB94
)
define_offset
(
InputInfo
,
0
,
0x21A0E8
,
0x21A0F0
,
0x26E8CC
,
0x26E9FC
,
0x26EB84
)
define_offset
(
AddCommand
,
0
,
0x65AD0
,
0x65BA0
,
0x69000
,
0x69730
,
0x69770
)
}
// namespace offsets

Loku
04.03.2026, 13:08
Hello, does anyone have these offsites on r3-0?

C++:






// unknown, r1, r2, r3-1, r4, r5
define_offset
(
Info
,
0
,
0x21A0F8
,
0x21A100
,
0x26E8DC
,
0x26EA0C
,
0x26EB94
)
define_offset
(
InputInfo
,
0
,
0x21A0E8
,
0x21A0F0
,
0x26E8CC
,
0x26E9FC
,
0x26EB84
)
define_offset
(
AddCommand
,
0
,
0x65AD0
,
0x65BA0
,
0x69000
,
0x69730
,
0x69770
)
}
// namespace offsets





there's no r1-0 as far as i know, there's a r4-2 version though

0xff65
04.03.2026, 23:09
there's no r1-0 as far as i know, there's a r4-2 version though

0xff65
13.03.2026, 21:06
Приветствую, выхожу из машины плагин перестает работать почему-то, pPed->m_pVehicle

C++:






#include "plugin.h"
#include "CWorld.h"
#include "CCamera.h"
#include "extensions/ScriptCommands.h"
using
namespace
plugin
;
class
Project5
{
public
:
std
::
unordered_map
>
vKeys
=
{
{
49
,
{
31
,
30
}
}
,
{
50
,
{
22
,
23
,
24
,
91
}
}
,
{
51
,
{
25
,
27
,
26
}
}
,
{
52
,
{
29
}
}
,
{
53
,
{
34
,
33
}
}
}
;
Project5
(
)
{
Events
::
drawingEvent
+=
[
this
]
{
if
(
!
isPlayerPlaying
(
)
||
isInputActive
(
)
)
return
;
for
(
const
auto
&
[
key
,
weapons
]
:
vKeys
)
{
if
(
KeyPressed
(
key
)
)
{
printf
(
"Key: %d\n"
,
key
)
;
CPed
*
pPed
=
CWorld
::
Players
[
CWorld
::
PlayerInFocus
]
.
m_pPed
;
std
::
uint32_t
nHandle
=
CPools
::
GetPedRef
(
pPed
)
;
for
(
std
::
uint8_t
nWeapon
:
weapons
)
{
printf
(
"Weapon: %d\n"
,
nWeapon
)
;
if
(
Command

(
nHandle
,
nWeapon
)
)
{
Command

(
nHandle
,
0
)
;
Command

(
nHandle
,
nWeapon
)
;
break
;
}
}
}
}
}
;
}
bool
isPlayerPlaying
(
)
{
return
CWorld
::
Players
[
CWorld
::
PlayerInFocus
]
.
m_pPed
!=
nullptr
;
}
bool
isInputActive
(
)
{
CPed
*
pPed
=
CWorld
::
Players
[
CWorld
::
PlayerInFocus
]
.
m_pPed
;
return
(
pPed
&&
pPed
->
m_pVehicle
)
;
}
}
Project5Plugin
;

ARMOR
16.03.2026, 03:49
Приветствую, выхожу из машины плагин перестает работать почему-то, pPed->m_pVehicle

C++:






#include "plugin.h"
#include "CWorld.h"
#include "CCamera.h"
#include "extensions/ScriptCommands.h"
using
namespace
plugin
;
class
Project5
{
public
:
std
::
unordered_map
>
vKeys
=
{
{
49
,
{
31
,
30
}
}
,
{
50
,
{
22
,
23
,
24
,
91
}
}
,
{
51
,
{
25
,
27
,
26
}
}
,
{
52
,
{
29
}
}
,
{
53
,
{
34
,
33
}
}
}
;
Project5
(
)
{
Events
::
drawingEvent
+=
[
this
]
{
if
(
!
isPlayerPlaying
(
)
||
isInputActive
(
)
)
return
;
for
(
const
auto
&
[
key
,
weapons
]
:
vKeys
)
{
if
(
KeyPressed
(
key
)
)
{
printf
(
"Key: %d\n"
,
key
)
;
CPed
*
pPed
=
CWorld
::
Players
[
CWorld
::
PlayerInFocus
]
.
m_pPed
;
std
::
uint32_t
nHandle
=
CPools
::
GetPedRef
(
pPed
)
;
for
(
std
::
uint8_t
nWeapon
:
weapons
)
{
printf
(
"Weapon: %d\n"
,
nWeapon
)
;
if
(
Command

(
nHandle
,
nWeapon
)
)
{
Command

(
nHandle
,
0
)
;
Command

(
nHandle
,
nWeapon
)
;
break
;
}
}
}
}
}
;
}
bool
isPlayerPlaying
(
)
{
return
CWorld
::
Players
[
CWorld
::
PlayerInFocus
]
.
m_pPed
!=
nullptr
;
}
bool
isInputActive
(
)
{
CPed
*
pPed
=
CWorld
::
Players
[
CWorld
::
PlayerInFocus
]
.
m_pPed
;
return
(
pPed
&&
pPed
->
m_pVehicle
)
;
}
}
Project5Plugin
;





Потому что при выходе из машины в m_pPed всё равно хранится указатель на последний транспорт в котором сидел игрок, а у тебя в isInputActive() идёт как раз таки проверка на то пустой указатель m_pVehicle, или нет. Правильней будет проверять так:

C++:






bool
isPlayerInVehicle
(
)
{
CPed
*
pPed
=
CWorld
::
Players
[
CWorld
::
PlayerInFocus
]
.
m_pPed
;
if
(
!
pPed
)
return
false
;
return
pPed
->
bInVehicle
;
}

swlm
12.04.2026, 00:41
Вроде правильно инициализирую ImGui, но почему-то блять не отображается стандартное меню ImGUi

Код:






if (overlay != nullptr) {
if (ImGui::GetCurrentContext() == nullptr) return gameLoop();
ImGui_ImplDX9_NewFrame();
ImGui_ImplWin32_NewFrame();
ImGui::NewFrame();

ImGui::Begin("Test Window");
ImGui::Text("ImGui work");
ImGui::End();

overlay->Render();

ImGui::EndFrame();
ImGui::Render();
ImGui_ImplDX9_RenderDrawData(ImGui::GetDrawData()) ;
}

static void* __fastcall CChat__Hook(void* ptr, void*, IDirect3DDevice9* pDevice, void* pFontRenderer, const char* pChatLogPath) {

ImGui::CreateContext();
ImGui_ImplWin32_Init(GetActiveWindow());
ImGui_ImplDX9_Init(pDevice); // я даже взял девайс от сампа, ибо подумал что самп перехватывает игровой девайс, но нет, это не так... (ХОТЯ В МОЁМ ДРУГОМ ПЛАГИНЕ ГДЕ РАБОТА С IMGUI, И ПРИ ИНИЦИАЛИЗАЦИИ Я ИСПОЛЬЗУЮ ДЕВАЙС ПО АДРЕСУ 0xC97C28 ТО ВСЁ ЗАЕБИСЬ)

ImGui::StyleColorsDark();

printf("CChat__Hook\n");

return CChat_hook(ptr, pDevice, pFontRenderer, pChatLogPath);
}




Я не знаю, может надо font обязательно создавать, но ведь имгуи сам его должен подтягивать по умолчанию...

Дайте feedback, а то я не очень понимаю что не так, единственное до чего я догадываюсь, это то что игра съедает кадр который я рендерю..

AdCKuY_DpO4uLa
12.04.2026, 09:00
Вроде правильно инициализирую ImGui, но почему-то блять не отображается стандартное меню ImGUi

Код:






if (overlay != nullptr) {
if (ImGui::GetCurrentContext() == nullptr) return gameLoop();
ImGui_ImplDX9_NewFrame();
ImGui_ImplWin32_NewFrame();
ImGui::NewFrame();

ImGui::Begin("Test Window");
ImGui::Text("ImGui work");
ImGui::End();

overlay->Render();

ImGui::EndFrame();
ImGui::Render();
ImGui_ImplDX9_RenderDrawData(ImGui::GetDrawData()) ;
}

static void* __fastcall CChat__Hook(void* ptr, void*, IDirect3DDevice9* pDevice, void* pFontRenderer, const char* pChatLogPath) {

ImGui::CreateContext();
ImGui_ImplWin32_Init(GetActiveWindow());
ImGui_ImplDX9_Init(pDevice); // я даже взял девайс от сампа, ибо подумал что самп перехватывает игровой девайс, но нет, это не так... (ХОТЯ В МОЁМ ДРУГОМ ПЛАГИНЕ ГДЕ РАБОТА С IMGUI, И ПРИ ИНИЦИАЛИЗАЦИИ Я ИСПОЛЬЗУЮ ДЕВАЙС ПО АДРЕСУ 0xC97C28 ТО ВСЁ ЗАЕБИСЬ)

ImGui::StyleColorsDark();

printf("CChat__Hook\n");

return CChat_hook(ptr, pDevice, pFontRenderer, pChatLogPath);
}




Я не знаю, может надо font обязательно создавать, но ведь имгуи сам его должен подтягивать по умолчанию...
Дайте feedback, а то я не очень понимаю что не так, единственное до чего я догадываюсь, это то что игра съедает кадр который я рендерю..



SAMP_API/SAMP_API_ONE_HEADER/main.cpp at main · DpO4uLa/SAMP_API (https://github.com/DpO4uLa/SAMP_API/blob/main/SAMP_API_ONE_HEADER/main.cpp)

SDK для быстрого взаимодействия с SA-MP & Gta SA. Contribute to DpO4uLa/SAMP_API development by creating an account on GitHub.

github.com

Trainee
12.04.2026, 12:11
Вопрос.

Всем привет! С чего стоит изучать c++ для сампа? Может есть какие-либо учебники? Спасибо

upd: Хочу дополнить свой вопрос. В чем отличаются dll, sf и asi в сампе? Есть ли что-то лучшее? Потому что как я понял sf требует сампфункса, asi - asiloader ( moonloader ), а dll? Язык то один

chromiusj
12.04.2026, 12:20
Вопрос.
Всем привет! С чего стоит изучать c++ для сампа? Может есть какие-либо учебники? Спасибо
upd: Хочу дополнить свой вопрос. В чем отличаются dll, sf и asi в сампе? Есть ли что-то лучшее? Потому что как я понял sf требует сампфункса, asi - asiloader ( moonloader ), а dll? Язык то один


dll = asi

swlm
12.04.2026, 16:52
SAMP_API/SAMP_API_ONE_HEADER/main.cpp at main · DpO4uLa/SAMP_API (https://github.com/DpO4uLa/SAMP_API/blob/main/SAMP_API_ONE_HEADER/main.cpp)

SDK для быстрого взаимодействия с SA-MP & Gta SA. Contribute to DpO4uLa/SAMP_API development by creating an account on GitHub.

github.com



Я даже делал хук на D3DPresent, но даже он мне ничем не помог, если ты об этом..

P.S. Ебать того всё, у меня был не правильный хук на D3DPresent, спасибо ёптеть

я вчера просто над этой проблемой сидел 4 часа блять...

Мужики, возможно ли из RwTexture или из RwRaster получить указатель на IDirect3DTexture9?

Если да, то как?

ARMOR
14.04.2026, 02:01
Мужики, возможно ли из RwTexture или из RwRaster получить указатель на IDirect3DTexture9?
Если да, то как?



C++:






RwTexture
*
pTexture
;
IDirect3DTexture9
*
pD3DTexture
=
*
reinterpret_cast

(
pTexture
->
raster
+
1
)
;

swlm
14.04.2026, 12:44
C++:






RwTexture
*
pTexture
;
IDirect3DTexture9
*
pD3DTexture
=
*
reinterpret_cast

(
pTexture
->
raster
+
1
)
;





охренеть, спасибо