ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   API SF | Урок 7 - Aimbot (https://forum.antichat.xyz/showthread.php?t=1332774)

CleanLegend 09.04.2019 22:13

Привет, сегодня напишем простой аимбот на SF.​
Алгоритм:

- найти id игрока

- получить координаты игрока

- рассчитать угол поворота

- повернуть камеру на этот угол

Получаем id и координаты игрока по зеленому треугольнику:

C++:





Код:

Cvector enpos
;
int
enid
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
sAimingAtPid
;
if
(
enid
!=
65535
)
{
enpos
.
fX
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
enid
]
->
pPlayerData
->
onFootData
.
fPosition
[
0
]
;
enpos
.
fY
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
enid
]
->
pPlayerData
->
onFootData
.
fPosition
[
1
]
;
enpos
.
fZ
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
enid
]
->
pPlayerData
->
onFootData
.
fPosition
[
2
]
;
}



второй вариант получения id игрока с помощью этой функции - https://blast.hk/threads/10970/#post-124093

C++:





Код:

int
enid
=
GetPlayerTarget
(
50
)
;
if
(
enid
!=
-
1
)
{
enpos
.
fX
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
enid
]
->
pPlayerData
->
onFootData
.
fPosition
[
0
]
;
enpos
.
fY
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
enid
]
->
pPlayerData
->
onFootData
.
fPosition
[
1
]
;
enpos
.
fZ
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
enid
]
->
pPlayerData
->
onFootData
.
fPosition
[
2
]
;
}



Получаем свои координаты и рассчитываем угол:

C++:





Код:

CCamera
*
pCamera
=
GAME
->
GetCamera
(
)
;
mypos
=
*
pCamera
->
GetCam
(
pCamera
->
GetActiveCam
(
)
)
->
GetSource
(
)
;
vector
=
mypos
-
enpos
;
float
AngleX
=
atan2f
(
vector
.
fY
,
-
vector
.
fX
)
-
M_PI
/
2
;



Поворачиваем камеру:

C++:





Код:

*
(
float
*
)
0xB6F258
=
-
(
AngleX
-
M_PI
/
2
)
;



Поворот с учетом смещения прицела(взято из собейта - https://github.com/BlastHackNet/mod_...actor.cpp#L173):

C++:





Код:

float
*
crosshairOffset
=
(
float
*
)
0xB6EC10
;
float
mult
=
tan
(
pCamera
->
GetCam
(
pCamera
->
GetActiveCam
(
)
)
->
GetFOV
(
)
*
0.5f
*
0.017453292f
)
;
float
fx
=
M_PI
-
atan2
(
1.0f
,
mult
*
(
crosshairOffset
[
1
]
-
0.5f
+
crosshairOffset
[
1
]
-
0.5f
)
)
;



Поворачиваем камеру:

C++:





Код:

*
(
float
*
)
0xB6F258
=
-
(
AngleX
-
fx
)
;



полный листинг:

C++:





Код:

void
Aimbot
(
)
{
CVector mypos
;
CVector enpos
;
CVector vector
;
int
enid
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
sAimingAtPid
;
if
(
enid
!=
65535
)
{
enpos
.
fX
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
enid
]
->
pPlayerData
->
onFootData
.
fPosition
[
0
]
;
enpos
.
fY
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
enid
]
->
pPlayerData
->
onFootData
.
fPosition
[
1
]
;
enpos
.
fZ
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
enid
]
->
pPlayerData
->
onFootData
.
fPosition
[
2
]
;
CCamera
*
pCamera
=
GAME
->
GetCamera
(
)
;
mypos
=
*
pCamera
->
GetCam
(
pCamera
->
GetActiveCam
(
)
)
->
GetSource
(
)
;
vector
=
mypos
-
enpos
;
float
*
crosshairOffset
=
(
float
*
)
0xB6EC10
;
float
mult
=
tan
(
pCamera
->
GetCam
(
pCamera
->
GetActiveCam
(
)
)
->
GetFOV
(
)
*
0.5f
*
0.017453292f
)
;
float
fx
=
M_PI
-
atan2
(
1.0f
,
mult
*
(
crosshairOffset
[
1
]
-
0.5f
+
crosshairOffset
[
1
]
-
0.5f
)
)
;
float
AngleX
=
atan2f
(
vector
.
fY
,
-
vector
.
fX
)
-
M_PI
/
2
;
*
(
float
*
)
0xB6F258
=
-
(
AngleX
-
fx
)
;
}
}


AnWu 09.04.2019 22:44

Цитата:

Сообщение от Спойлер

Лучше бы показал как к Plugin SDK подрубить самп, а не аим делать. Хотя полезнич.

Chokecha 10.04.2019 11:41

А где можно найти предыдущие уроки ?

imring 10.04.2019 12:07

Цитата:

Сообщение от DonHomka

Лучше бы показал как к Plugin SDK подрубить самп

самп же хукает gameProcessEvent и т.д. тебе надо в initRwEvent (initGameEvent и т.д.) регать евент.

Natami 14.04.2019 10:21

Попробовал 2-ой вариант:

error C3861: GetPlayerTarget: идентификатор не найден

В чем проблема?

iAmerican 14.04.2019 12:09

Цитата:

Сообщение от Natami

Попробовал 2-ой вариант:
error C3861: GetPlayerTarget: идентификатор не найден

В чем проблема?

Функцию саму добавил в проект?

https://blast.hk/threads/10970/#post-124093

Natami 14.04.2019 12:19

Цитата:

Сообщение от iAmerican

Функцию саму добавил в проект?
https://blast.hk/threads/10970/#post-124093

Да,в конец

iAmerican 14.04.2019 13:01

Цитата:

Сообщение от Natami

Да,в конец

либо в начало добавь функцию , либо сверху добавь перед использованием функции ( не в теле функции )

C++:





Код:

int
GetPlayerTarget
(
int
radius
)
;



Время: 12:34