PDA

Просмотр полной версии : API SF | Урок 7 - Aimbot


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_s0beit_sa/blob/master/src/cheat_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
https://cs8.pikabu.ru/post_img/big/2017/08/04/6/1501836441154977104.jpg


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

Chokecha
10.04.2019, 11:41
А где можно найти предыдущие уроки ?

imring
10.04.2019, 12:07
Лучше бы показал как к Plugin SDK подрубить самп


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

Natami
14.04.2019, 10:21
Попробовал 2-ой вариант:

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

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

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

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


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

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

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


Да,в конец

iAmerican
14.04.2019, 13:01
Да,в конец



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

C++:






int
GetPlayerTarget
(
int
radius
)
;