Просмотр полной версии : С/С++ Вопрос - Ответ
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/
Есть какая либо реализация вывода координат в углу экрана как на скрине?
при изменении меняется для всей модели а мне надо как то сделать для определеного CVehicle
через СDog класс
Есть какая либо реализация вывода координат в углу экрана как на скрине?
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
как нопнуть весь худ гташки?
как нопнуть весь худ гташки?
C++:
*
reinterpret_cast
(
0x58FAE0
)
=
0xC3
;
вайега52
13.04.2025, 20:00
Кто-нибудь ставил нейкид хуки на линухе х86? Посоветуйте пожалуйста библиотеку, чтобы можно было вытаскивать регистры (можно даже не через саму либу, а через инлайн асм в нейкид функах)
Кто-нибудь ставил нейкид хуки на линухе х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/
А не подскажешь, как правильно изменить значение в 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, а если ставить позже, оно разве не должно работать с нейкид функой?
Если ставить хук на 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
(
)
;
}
пытаюсь поставить хук на 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
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
;
}
что за функция? 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, то может произойти краш, или что-то ещё.
как рисовать картинку в имгуи меню? у меня имгуи дх11 киеро хук
как рисовать картинку в имгуи меню? у меня имгуи дх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
;
}
Приветствую, пытаюсь собрать 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
Приветствую, пытаюсь собрать 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)
как получить cped гташки через sampapi по id
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 (под любую платформу)
Вопрос выше снова актуален. Оказывается, вызов клео из соседних тредов небезопасен; я в одной функции добавил вообщение в чат (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)
как сделать 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.
Если не ошибаюсь, то на бх есть гайды по мат. части того, как работает любой аим
как можно отключить поворот камеры на 180* при нажатии на СКМ
есть ли структура у cef'a 252 пакета что то по типу stOnFootData
лучше конечно если есть на амазинг у них как я знаю он отличается от обычного
вайега52
12.06.2025, 09:03
есть ли структура у cef'a 252 пакета что то по типу stOnFootData
лучше конечно если есть на амазинг у них как я знаю он отличается от обычного
252 пакет это кастомный пакет амайзинга, не продуманный изначально в сампе, соответственно у него структура полностью своя, при этом, насколько знаю, это еще работает в связке с дополнительным шифрованием, поэтому, так просто содержимое ты вряд-ли достанешь
как отключить поворот камеры скм ( назад ), 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"
)
;
}
Как начать писать .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. но если удалить маркер, подождать секунду и создать с новым цветом, всё будет ок
Всем привет. Есть какой-нибудь API на плюсах для работы с сетевым движком (RakNet) прямо на сервере (samp)?
А то в падлу копировать код из Pawn.RakNet
вайега52
23.07.2025, 21:18
Всем привет. Есть какой-нибудь API на плюсах для работы с сетевым движком (RakNet) прямо на сервере (samp)?
А то в падлу копировать код из Pawn.RakNet
Как-то начинал переписывать и потом забил: https://github.com/whyega/rakplugin
Как-то начинал переписывать и потом забил: https://github.com/whyega/rakplugin
Мужик спасибо. Оно рабочее?
Мужик спасибо. Оно рабочее?
Главное, чтобы это был samp-server r2
вайега52
23.07.2025, 21:41
Мужик спасибо. Оно рабочее?
Главное, чтобы это был samp-server r2
я не помню, под какую ОС делал, но да - р2. насколько рабочее точно не скажу, но есть база для работы
я не помню, под какую ОС делал, но да - р2. насколько рабочее точно не скажу, но есть база для работы
Под винду же делал, не? CMakeLists.txt
вайега52
23.07.2025, 23:53
Под винду же делал, не? CMakeLists.txt
скорее всего
скорее всего
Привет. Подключил библиотеку, вызываю 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
Подскажите пожалуйста, как вызвать зеленый треугольник. По-разному пытался, но что-то уже мозги не варят :)
Последнее, что пытался (хз, последние надежды на функцию с псдк была):
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
)
;
}
Подскажите пожалуйста, как вызвать зеленый треугольник. По-разному пытался, но что-то уже мозги не варят :)
Последнее, что пытался (хз, последние надежды на функцию с псдк была):
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 других педов
Это потому что 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, если ты не в прицеле.
Вопрос по поводу 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 (самп его не прочитает), либо результат вызова оригинала
Ты это делаешь внутри своего самп клиента или хукаешь самп.длл?
Если второй вариант, то тебе надо хукать вызов 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
в структуре 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
Во, сделал так:
И хук заработал, только как теперь работать с пакетами, когда я пытаюсь получить что-то из пакета, происходит краш.
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
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 и должно работать
Потому-что эта функция вызывается в бесконечном цикле игры и не морозит основной поток, т.е. если нет пакета для получения, возвращается 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
Пытаюсь получить координаты локального игрока в мире, но почему-то они постоянно 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)
Лучше используй псдк, получай 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
Не совсем понял, как это. Ты можешь просто в свой проект подключить 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 файла псдк и до заголовочных файлов
Выводило 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
А какие ошибки при компиляции?
А какие ошибки при компиляции?
Там их просто море...
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; остановка компиляции
Скорее всего неправильно расставлены инклуды
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/
При запуске предлагает выбрать монитор и разрешение, как можно перехватить это окно выбора и изменить, картинку там добавить или текст какой то?
Через 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, попробуй восстанавливать состояние, я обошёл это обычным перезапуском рендера
У меня подобное было при рендере текста через 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();
лишнее
лишнее
и вот такую ***ню вижу, когда нажимаю кнопки ALT и ENTER
https://forum.antichat.xyz/attachments/28631906/
вайега52
24.08.2025, 22:40
и вот такую ***ню вижу, когда нажимаю кнопки ALT и ENTER
При удалении создания шрифта в ресете, ничего не меняется?
При удалении создания шрифта в ресете, ничего не меняется?
У меня вообще подозрения на то, что я не правильно понял предназначения этих двух 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 (Восстанавливать состояния в этом случае также не требуется. Это делается автоматически)
В точку
Это не нужно делать, достаточно вызвать 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
Столкнулся с такой проблемой, что на 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)
Есть одна очень бесячая проблема - при частом 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
Почему-то 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"
)
;
}
}
помогите с моей функцией 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
;
}
}
}
помогите с моей функцией 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
так в цикл закинь игровой, 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
)
;
}
Крашит как только должен появится радар
Пробую изменить размеры радара, при открытии сцены игры крашит, в чём может быть проблема? 🧐
с++:
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
)
;
}
Крашит как только должен появится радар
Ты указатель на переменные должен передавать, а не их значение, вроде как.
как именно в сампе работает сериализация пакетов?(acks если быть точным)
Приветствую, каким образом можно реализовать что бы цикл повторялся не бесконечно, а не более 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
;
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++;
появилась необходимось хука объектов но стандартный хук плагин сдк не работает
Код:
[CODE]
plugin::Events::objectRenderEvent.before += [](CEntity* o) {
cout
в консоль попросту не выводятся объекты
Почему не срабатывает хук чата?
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
;
}
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
;
Почему вместо 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 писать, как раз под си, но все апи придется самому реализовывать, параллельно читая доку к бот апи тг. Как по мне, легче взять готовое, отработанное решение, чем городить лясопеды
Приветствую, пытаюсь собрать загрузчик состоящих из двух частей - серверной и клиентской, с клиентской стороны все нормально клиент лоадер собран, а вот с серверной возникли проблемы, собрал директорию с помощью 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 какой-нибудь и на ней собирай
Скиньте основу ASI плагина для Visual Studio
Как проверить, была ли отпущена определённая клавиша? Например: wasKeyReleased(vkeys.VK_RBUTTON)
вайега52
17.11.2025, 08:33
Как проверить, была ли отпущена определённая клавиша? Например: wasKeyReleased(vkeys.VK_RBUTTON)
Хук на WndProc
Альт как прожать? Так не воркает:
С++:
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
)
)
;
ратку опять кинь, прожмется алт
ратку опять кинь
Какую ратку?
undefine
26.11.2025, 18:13
Какую ратку?
забыл? тебе в тг написали ты кинул свой твинк и с него типу ратку кинули
забыл? тебе в тг написали ты кинул свой твинк и с него типу ратку кинули
В тему с заказами зайди, там много весело "неактуально", а потом - я сменил ТГ юз, ушел в работу в реальной жизни. ТГ юз занял идиот который заскамил типов, попросив обратно ТГ юз - он отказал. В итоге скамит и по сей день, к этому я не имею никакого отношения
Альт как прожать? Так не воркает:
С++:
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 пакет не отправляется от клиента (при нажатии альта его просто нет - вход в квартиру)
Альт как прожать? Так не воркает:
С++:
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, мне нужен только код эффекта крови. Может ли кто-нибудь помочь?
Как в API SAMP получить ID машины по ID игрока
undefine
21.12.2025, 18:35
Как в API SAMP получить ID машины по ID игрока
FindPlayerVechicle(playerid, true);
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!
Всем привет. Кто-то может знает, как сделать, чтобы позиция прикриплённого объекта была не статическая? А то например когда я приседаю, приатаченный объект не движется за игроком.
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
Какая функция отвечает за остановку неона на машину? Как это происходит
Какая функция отвечает за остановку неона на машину? Как это происходит
из коробки в гта вообще не продумывали неон, никакой функции нету
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
Мне на сервер именно нужно , через плагин под сервер
Приветствую, есть у кого эти оффесты на 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
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
there's no r1-0 as far as i know, there's a r4-2 version though
Приветствую, выхожу из машины плагин перестает работать почему-то, 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
;
Приветствую, выхожу из машины плагин перестает работать почему-то, 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
;
}
Вроде правильно инициализирую 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
Вопрос.
Всем привет! С чего стоит изучать 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
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?
Если да, то как?
Мужики, возможно ли из RwTexture или из RwRaster получить указатель на IDirect3DTexture9?
Если да, то как?
C++:
RwTexture
*
pTexture
;
IDirect3DTexture9
*
pD3DTexture
=
*
reinterpret_cast
(
pTexture
->
raster
+
1
)
;
C++:
RwTexture
*
pTexture
;
IDirect3DTexture9
*
pD3DTexture
=
*
reinterpret_cast
(
pTexture
->
raster
+
1
)
;
охренеть, спасибо
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot