| qwertyrus |
03.04.2024 22:55 |
Переписать external cheat в internal для MTA оказалось труднее, чем я думал(инжект работает и не банит). Заранее извиняюсь если код выглядит плохо, только учусь. Крашит после инжекта, пробовал изменять функцию world_to_screen, крашит в if'ах(внутри функции). Помогите если не трудно
C++:
Код:
#include "pch.h"
#include
#include
#include
#include
#include
#include
std
::
vector
world_to_screen
(
std
::
vector
>
ViewMatrix1
,
float
x
,
float
y
,
float
z
)
{
std
::
vector
badcord
=
{
-
1
,
-
1
}
;
std
::
vector
result
(
2
)
;
float
screenz
=
(
z
*
ViewMatrix1
[
2
]
[
2
]
)
+
(
y
*
ViewMatrix1
[
1
]
[
2
]
)
+
(
x
*
ViewMatrix1
[
0
]
[
2
]
)
+
ViewMatrix1
[
3
]
[
2
]
;
if
(
screenz
=
screenx
&&
screenx
>=
0
&&
1080
>=
screeny
&&
screeny
>=
0
)
{
result
[
0
]
=
static_cast
(
screenx
)
;
result
[
1
]
=
static_cast
(
screeny
)
;
return
result
;
}
else
{
return
badcord
;
}
}
DWORD WINAPI
MainThread
(
HMODULE hModule
)
{
AllocConsole
(
)
;
system
(
"title First project"
)
;
FILE
*
f
;
freopen_s
(
&
f
,
"CONOUT$"
,
"w"
,
stdout
)
;
//printf("Test 1");
Sleep
(
200
)
;
DWORD offsetview
=
0xB6FA2C
;
bool
espstatus
=
false
;
DWORD
*
cped
=
(
DWORD
*
)
0xB6F5F0
;
float
*
myhealth
=
(
float
*
)
(
*
cped
+
0x540
)
;
float
*
myarmour
=
(
float
*
)
(
*
cped
+
0x548
)
;
DWORD
*
xyz
=
(
DWORD
*
)
(
*
cped
+
0x14
)
;
float
*
x
=
(
float
*
)
(
*
xyz
+
0x30
)
;
float
*
y
=
(
float
*
)
(
*
xyz
+
0x30
+
4
)
;
float
*
z
=
(
float
*
)
(
*
xyz
+
0x30
+
8
)
;
std
::
vector
>
ViewMatrix
(
4
,
std
::
vector
(
4
)
)
;
while
(
!
GetAsyncKeyState
(
VK_END
)
)
{
if
(
GetAsyncKeyState
(
VK_INSERT
)
)
{
espstatus
=
true
;
}
if
(
GetAsyncKeyState
(
VK_DELETE
)
)
{
espstatus
=
false
;
}
for
(
int
i
=
0
;
i
=
4.0f
)
{
DWORD
*
pointercoords
=
(
DWORD
*
)
(
cpedsearch
+
0x14
)
;
float
*
hisx
=
(
float
*
)
(
*
cpedsearch
+
0x30
)
;
float
*
hisy
=
(
float
*
)
(
*
cpedsearch
+
0x34
)
;
float
*
hisz
=
(
float
*
)
(
*
cpedsearch
+
0x38
)
;
std
::
vector
onscreen
=
world_to_screen
(
ViewMatrix
,
*
hisx
,
*
hisy
,
*
hisz
)
;
//далее будет рисование, но пока упустим
}
}
}
if
(
GetAsyncKeyState
(
VK_END
)
)
{
FreeConsole
(
)
;
fclose
(
f
)
;
}
FreeLibraryAndExitThread
(
hModule
,
0
)
;
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
)
;
//disables attach and detach notifications
CloseHandle
(
CreateThread
(
nullptr
,
0
,
(
LPTHREAD_START_ROUTINE
)
MainThread
,
hModule
,
0
,
nullptr
)
)
;
case
DLL_THREAD_ATTACH
:
case
DLL_THREAD_DETACH
:
case
DLL_PROCESS_DETACH
:
break
;
}
return
TRUE
;
}
|