HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #11  
Старый 07.03.2016, 16:15
AWRage
Постоянный
Регистрация: 10.07.2015
Сообщений: 642
С нами: 5706781

Репутация: 43


По умолчанию

Я думаю, по названиям функций понятно.

C++:





Код:
int
GetWeaponID
(
)
{
return
PEDSELF
->
GetWeapon
(
PEDSELF
->
GetCurrentWeaponSlot
(
)
)
->
GetType
(
)
;
}
eWeaponState
GetWeaponState
(
)
{
return
PEDSELF
->
GetWeapon
(
PEDSELF
->
GetCurrentWeaponSlot
(
)
)
->
GetState
(
)
;
}
int
GetAmmoInClip
(
)
{
return
PEDSELF
->
GetWeapon
(
PEDSELF
->
GetCurrentWeaponSlot
(
)
)
->
GetAmmoInClip
(
)
;
}
int
GetAmmoTotal
(
)
{
return
PEDSELF
->
GetWeapon
(
PEDSELF
->
GetCurrentWeaponSlot
(
)
)
->
GetAmmoTotal
(
)
;
}
int
GetWantedLevel
(
)
{
return
*
(
DWORD
*
)
0x58DB60
;
}
 
Ответить с цитированием

  #12  
Старый 07.03.2016, 22:44
Dark_Knight
Флудер
Регистрация: 18.03.2013
Сообщений: 4,080
С нами: 6921957

Репутация: 183


По умолчанию

int GetWantedLevel()

{

return *(DWORD*)0x58DB60;

}

Там байт храниться.

Так же это всё можно найти в пЛокалПлеер.
 
Ответить с цитированием

  #13  
Старый 08.03.2016, 21:24
By_Surse
Постоянный
Регистрация: 06.07.2015
Сообщений: 310
С нами: 5712968

Репутация: 63
По умолчанию

Получает разрешение экрана.

Вызов: POINT Screen = get_screen_resolution();

C++:





Код:
POINT
get_screen_resolution
(
)
{
POINT pos
;
pos
.
x
=
*
(
int
*
)
0xC9C040
;
pos
.
y
=
*
(
int
*
)
0xC9C044
;
return
pos
;
}
 
Ответить с цитированием

  #14  
Старый 13.03.2016, 10:34
By_Surse
Постоянный
Регистрация: 06.07.2015
Сообщений: 310
С нами: 5712968

Репутация: 63
По умолчанию

Выдача оружия через эмуляцию RPC

C++:





Код:
void
emulateRPC_giveweapon
(
uint32_t
weapon_id
,
uint32_t
ammo
)
{
BitStream bsClass
;
bsClass
.
Write
(
uint32_t
(
weapon_id
)
)
;
// WeaponID
bsClass
.
Write
(
uint32_t
(
ammo
)
)
;
// Ammo
SF
->
getRakNet
(
)
->
emulateRecvRPC
(
22
,
&
bsClass
)
;
}


Смена скина через эмуляцию RPC

C++:





Код:
void
emulateRPC_setskin
(
uint32_t
player_id
,
uint32_t
skin_id
)
{
BitStream bsClass
;
bsClass
.
Write
(
uint32_t
(
player_id
)
)
;
bsClass
.
Write
(
uint32_t
(
skin_id
)
)
;
SF
->
getRakNet
(
)
->
emulateRecvRPC
(
153
,
&
bsClass
)
;
}


Отправка фейковой позиции...

C++:





Код:
void
send_onfootdata
(
float
x
,
float
y
,
float
z
)
{
if
(
BS
->
getPlugin
(
)
->
actor_driving
(
-
1
)
)
return
;
BitStream bsOnfootSync
;
stOnFootData ofSync
;
memset
(
&
ofSync
,
0
,
sizeof
(
stOnFootData
)
)
;
ofSync
.
byteArmor
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
.
byteArmor
;
ofSync
.
byteCurrentWeapon
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
.
byteCurrentWeapon
;
ofSync
.
byteHealth
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
.
byteHealth
;
ofSync
.
byteSpecialAction
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
.
byteSpecialAction
;
ofSync
.
fMoveSpeed
[
0
]
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
.
fMoveSpeed
[
0
]
;
ofSync
.
fMoveSpeed
[
1
]
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
.
fMoveSpeed
[
1
]
;
ofSync
.
fMoveSpeed
[
2
]
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
.
fMoveSpeed
[
2
]
;
ofSync
.
fPosition
[
0
]
=
x
;
ofSync
.
fPosition
[
1
]
=
y
;
ofSync
.
fPosition
[
2
]
=
z
;
ofSync
.
fQuaternion
[
0
]
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
.
fQuaternion
[
0
]
;
ofSync
.
fQuaternion
[
1
]
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
.
fQuaternion
[
1
]
;
ofSync
.
fQuaternion
[
2
]
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
.
fQuaternion
[
2
]
;
ofSync
.
fQuaternion
[
3
]
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
.
fQuaternion
[
3
]
;
ofSync
.
fSurfingOffsets
[
0
]
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
.
fSurfingOffsets
[
0
]
;
ofSync
.
fSurfingOffsets
[
1
]
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
.
fSurfingOffsets
[
1
]
;
ofSync
.
fSurfingOffsets
[
2
]
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
.
fSurfingOffsets
[
2
]
;
ofSync
.
sAnimFlags
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
.
sAnimFlags
;
ofSync
.
sCurrentAnimationID
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
.
sCurrentAnimationID
;
ofSync
.
sKeys
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
.
sKeys
;
ofSync
.
sLeftRightKeys
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
.
sLeftRightKeys
;
ofSync
.
sSurfingVehicleID
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
.
sSurfingVehicleID
;
ofSync
.
stSampKeys
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
.
stSampKeys
;
ofSync
.
sUpDownKeys
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
.
sUpDownKeys
;
bsOnfootSync
.
Write
(
(
BYTE
)
ID_PLAYER_SYNC
)
;
bsOnfootSync
.
Write
(
(
PCHAR
)
&
ofSync
,
sizeof
(
stOnFootData
)
)
;
SF
->
getRakNet
(
)
->
SendPacket
(
&
bsOnfootSync
)
;
}


Фейк смерть от игрока

C++:





Код:
void
send_death
(
uint16_t
player_id
,
uint8_t
weapon
)
{
BitStream bsDeath
;
bsDeath
.
Write
(
weapon
)
;
bsDeath
.
Write
(
player_id
)
;
SF
->
getRakNet
(
)
->
SendRPC
(
RPC_Death
,
&
bsDeath
)
;
}
 
Ответить с цитированием

  #15  
Старый 27.09.2016, 19:09
iAmerican
Постоянный
Регистрация: 17.02.2014
Сообщений: 611
С нами: 6438231

Репутация: 133


По умолчанию

Возвращает ID игрока , на заданном радиусе от прицела.

C++:





[CODE]
void
CalcScreenCoors
(
D3DXVECTOR3
*
vecWorld
,
D3DXVECTOR3
*
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
)
)
;
}
int
GetPlayerTarget
(
int
radius
)
{
static
int
iX
;
static
int
iY
;
for
(
int
i
=
0
;
i

getSAMP
(
)
->
getPlayers
(
)
->
iIsListed
[
i
]
!=
1
)
continue
;
if
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
i
]
==
NULL
)
continue
;
if
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
i
]
->
pPlayerData
==
NULL
||
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
i
]
->
pPlayerData
->
pSAMP_Actor
==
NULL
)
continue
;
D3DXVECTOR3 vecPos
;
vecPos
.
x
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
i
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
->
base
.
matrix
[
12
]
;
vecPos
.
y
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
i
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
->
base
.
matrix
[
13
]
;
vecPos
.
z
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
i
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
->
base
.
matrix
[
14
]
;
D3DXVECTOR3 screenPos
;
CalcScreenCoors
(
&
vecPos
,
&
screenPos
)
;
if
(
screenPos
.
z

iX
+
(
radius
)
)
||
(
screenPos
.
y
>
iY
+
(
radius
)
)
||
(
screenPos
.
x



Использование :

C++:





Код:
static
int
iID
=
-
1
;
iID
=
GetPlayerTarget
(
50
)
 
Ответить с цитированием

  #16  
Старый 13.04.2018, 22:33
Dark_Knight
Флудер
Регистрация: 18.03.2013
Сообщений: 4,080
С нами: 6921957

Репутация: 183


По умолчанию

Цитата:
Сообщение от Муззи  

Обработчик событий OnClickMouse.
Ты идиот.

C++:





[CODE]
bool
OnMouseHover
(
float
x
,
float
y
,
float
w
,
float
h
)
{
POINT MousePosition
=
SF
->
getGame
(
)
->
getCursorPos
(
)
;
return
(
MousePosition
.
x
>=
x
&&
MousePosition
.
x
=
y
&&
MousePosition
.
y

 
Ответить с цитированием

  #17  
Старый 23.10.2018, 21:29
CleanLegend
Постоянный
Регистрация: 28.03.2013
Сообщений: 495
С нами: 6908018

Репутация: 213
По умолчанию

3D круг с этой темы - https://blast.hk/threads/25508/

C++:





Код:
void
krug3d
(
float
x
,
float
y
,
float
z
,
float
radius
,
D3DCOLOR Color
)
{
float
enpos
[
3
]
;
float
screen
[
2
]
,
screen2
[
2
]
;
float
step
=
M_PI
*
2.0
/
2047
;
for
(
float
rot
=
0
;
rot

getGame
(
)
->
convert3DCoordsToScreen
(
enpos
[
0
]
,
enpos
[
1
]
,
enpos
[
2
]
,
&
screen
[
0
]
,
&
screen
[
1
]
)
;
if
(
screen
[
0
]
!=
NULL
&&
screen2
[
0
]
!=
NULL
)
SF
->
getRender
(
)
->
DrawLine
(
screen
[
0
]
,
screen
[
1
]
,
screen2
[
0
]
,
screen2
[
1
]
,
2
,
Color
)
;
screen2
[
0
]
=
screen
[
0
]
;
screen2
[
1
]
=
screen
[
1
]
;
}
}


пример использования:

C++:





Код:
krug3d
(
X
,
Y
,
Z
,
3
,
0xFF00FF00
)
;


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






 
Ответить с цитированием

  #18  
Старый 24.10.2018, 01:31
ЯedЯuM
Участник форума
Регистрация: 13.03.2016
Сообщений: 242
С нами: 5351007

Репутация: 0
По умолчанию

Эмулирует анимацию стана как при попадании пули в скин.

Полезно для разработчиков сайлент аимов

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


C++:





Код:
int
GetWeaponFlag
(
int
weaponID
)
{
if
(
weaponID
==
24
||
weaponID
==
25
||
weaponID
==
27
)
return
140
;
else
if
(
weaponID
==
34
||
weaponID
==
33
)
return
75
;
return
-
1
;
}
void
EmulateStunShot
(
WORD playerId
,
int
weapon_id
,
int
damage_per_hit
)
{
int
stun_weapon
=
GetWeaponFlag
(
weapon_id
)
;
if
(
stun_weapon
!=
-
1
)
{
actor_info
*
actorInfo
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
playerId
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
;
if
(
actorInfo
==
nullptr
)
return
;
CPed
*
Ped
=
GAME
->
GetPools
(
)
->
GetPed
(
(
DWORD
*
)
actorInfo
)
;
if
(
Ped
==
nullptr
)
return
;
CEntity
*
Entity
=
Ped
->
GetDamageEntity
(
)
;
CWeapon
*
Wep
=
PEDSELF
->
GetWeapon
(
(
eWeaponType
)
weapon_id
)
;
if
(
Entity
==
nullptr
||
Wep
==
nullptr
)
return
;
Wep
->
GenerateDamageEvent
(
Ped
,
Entity
,
(
eWeaponType
)
weapon_id
,
damage_per_hit
,
PED_PIECE_RIGHT_ARM
,
GetWeaponFlag
(
weapon_id
)
)
;
}
}


Пример:

C++:





Код:
EmulateStunShot
(
228
,
24
,
42
)
;


Рассчитывает кватернион поворота к указанному игроку.

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


C++:





Код:
void
RotateQuaternion
(
float
angle_radian
,
float
*
quat_w
,
float
*
quat_x
)
{
*
quat_x
=
-
1
*
sinf
(
angle_radian
/
2.0f
)
;
*
quat_w
=
cosf
(
angle_radian
/
2.0f
)
;
}
void
RotateMeToPlayer
(
WORD player
)
{
stOnFootData ft
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
;
BitStream bs
;
actor_info
*
actorInfo
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
player
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
;
if
(
actor_info
==
nullptr
)
return
;
CPed
*
Ped
=
GAME
->
GetPools
(
)
->
GetPed
(
(
DWORD
*
)
actorInfo
)
;
CVector pers
;
if
(
Ped
==
nullptr
)
return
;
Ped
->
GetTransformedBonePosition
(
BONE_RIGHTWRIST
,
&
pers
)
;
float
angle
=
-
1
*
atan2
(
pers
.
fX
-
PEDSELF
->
GetPosition
(
)
->
fX
,
pers
.
fY
-
PEDSELF
->
GetPosition
(
)
->
fY
)
;
RotateQuaternion
(
angle
,
&
ft
.
fQuaternion
[
0
]
,
&
ft
.
fQuaternion
[
3
]
)
;
bs
.
Write
(
(
BYTE
)
ID_PLAYER_SYNC
)
;
bs
.
Write
(
(
PCHAR
)
&
ft
,
sizeof
(
stOnFootData
)
)
;
SF
->
getRakNet
(
)
->
SendPacket
(
&
bs
)
;
}


Пример:

C++:





Код:
RotateMeToPlayer
(
228
)
;
// Использовать в хуке онфут даты с блокировкой оригинальной синхры.
 
Ответить с цитированием

  #19  
Старый 24.10.2018, 20:44
ЯedЯuM
Участник форума
Регистрация: 13.03.2016
Сообщений: 242
С нами: 5351007

Репутация: 0
По умолчанию

Рассчитывет вектор прицеливания камеры к скину указанного игрока, кроме обхода античита на сайлент аим это необходимо для прострела стен на 0.3.7.

Это потому что далеко не на всех серверах система урона синхрит дамаг обязательно через RPC_GiveTakeDamage

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


C++:





Код:
inline
float
vect3_length
(
const
float
in
[
3
]
)
{
return
sqrtf
(
in
[
0
]
*
in
[
0
]
+
in
[
1
]
*
in
[
1
]
+
in
[
2
]
*
in
[
2
]
)
;
}
inline
void
vect3_copy
(
const
float
in
[
3
]
,
float
out
[
3
]
)
{
memcpy
(
out
,
in
,
sizeof
(
float
)
*
3
)
;
}
void
AimVectorToPlayer
(
WORD player
)
{
stAimData aim
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
aimData
;
actor_info
*
actorInfo
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
player
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
;
float
matched_pos
[
3
]
,
AimVector
[
3
]
;
vect3_copy
(
actorInfo
->
base
.
matrix
+
12
,
matched_pos
)
;
float
*
fPos
=
actorInfo
->
base
.
matrix
+
12
;
for
(
int
i
=
0
;
i

getRakNet
(
)
->
SendPacket
(
&
bs
)
;
}


Пример:

C++:





Код:
AimVectorToPlayer
(
228
)
;
// Использовать в хуке ID_AIM_SYNC с блокировкой оригинального пакета.


Кастомная функция расчёта урона для текущего оружия в руках.

Та что с мта классов выдаёт почему-то не валидные значения, моя функция умеет выдавать рандомно валидный урон дробовиков с которых любят палить сайлент аим всякие античиты по типу веапон конфига.

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


C++:





Код:
int
GetRandom
(
int
*
operand
)
{
LARGE_INTEGER start
,
end
,
freq
;
QueryPerformanceFrequency
(
&
freq
)
;
QueryPerformanceCounter
(
&
start
)
;
int
diff
=
operand
[
1
]
-
operand
[
0
]
;
QueryPerformanceCounter
(
&
end
)
;
srand
(
(
end
.
QuadPart
-
start
.
QuadPart
)
*
1000000
/
freq
.
QuadPart
)
;
int
random
=
(
rand
(
)
)
/
RAND_MAX
;
int
r
=
random
*
diff
;
return
operand
[
0
]
+
r
;
}
float
CalculateDamage
(
void
)
{
WORD gun
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
byteCurrentWeapon
;
float
dmg
=
0.0f
;
if
(
gun
==
24
||
gun
==
38
)
dmg
=
46.200000762939453125f
;
if
(
gun
==
22
||
gun
==
29
)
dmg
=
8.25f
;
if
(
gun
==
23
)
dmg
=
13.200000762939453125f
;
if
(
gun
==
28
||
gun
==
32
)
dmg
=
6.6000003814697265625f
;
if
(
gun
==
30
||
gun
==
31
)
dmg
=
9.90000057220458984375f
;
if
(
gun
==
33
)
dmg
=
24.7500019073486328125f
;
if
(
gun
==
34
)
dmg
=
41.25f
;
if
(
gun
==
25
||
gun
==
26
)
{
int
shotrandom
[
2
]
=
{
8
,
15
}
;
switch
(
GetRandom
(
shotrandom
)
)
{
case
8
:
dmg
=
26.4000015258789f
;
break
;
case
9
:
dmg
=
29.70000171661377f
;
break
;
case
10
:
dmg
=
33.00000190734863f
;
break
;
case
11
:
dmg
=
36.30000209808349f
;
break
;
case
12
:
dmg
=
39.60000228881836f
;
break
;
case
13
:
dmg
=
42.90000247955322f
;
break
;
case
14
:
dmg
=
46.20000267028808f
;
break
;
case
15
:
dmg
=
49.50000286102295f
;
break
;
}
}
if
(
gun
==
27
)
{
int
shotrandom
[
2
]
=
{
5
,
8
}
;
switch
(
GetRandom
(
shotrandom
)
)
{
case
5
:
dmg
=
24.75000143051147f
;
break
;
case
6
:
dmg
=
29.70000171661376f
;
break
;
case
7
:
dmg
=
34.65000200271606f
;
break
;
case
8
:
dmg
=
39.60000228881835f
;
break
;
}
}
return
dmg
;
}


Пример:

C++:





Код:
float
WeaponDamage
=
GetDamage
(
)
;


Рассчитывает валидный разброс к рандомной части тела и выдаёт валидный бодипарт для RPC_GiveDamage

Можно использовать для поражения целей внутри транспортных средств почти не трогая сам транспорт либо для раздачи хэдшотов.

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


C++:





Код:
byte
CalculateSpreadOffset
(
WORD targetID
,
float
*
target_pos
,
float
*
out_spread
)
{
actor_info
*
actorInfo
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
targetID
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
;
if
(
actorInfo
==
nullptr
)
return
255
;
CPed
*
Ped
=
GAME
->
GetPools
(
)
->
GetPed
(
(
DWORD
*
)
actorInfo
)
;
if
(
Ped
==
nullptr
)
return
255
;
int
random_bone
;
byte player_state
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
targetID
]
->
pPlayerData
->
bytePlayerState
;
if
(
player_state
==
PLAYER_STATE_ONFOOT
)
{
CVector rbody
;
byte bodyIDs
[
10
]
=
{
1
,
2
,
3
,
4
,
5
,
8
,
21
,
31
,
41
,
51
}
;
random_bone
=
bodyIDs
[
rand
(
)
%
9
]
;
Ped
->
GetTransformedBonePosition
(
(
eBone
)
random_bone
,
&
rbody
)
;
out_spread
[
0
]
=
rbody
.
fX
-
target_pos
[
0
]
;
out_spread
[
1
]
=
rbody
.
fY
-
target_pos
[
1
]
;
out_spread
[
2
]
=
rbody
.
fZ
-
target_pos
[
2
]
;
}
else
if
(
player_state
==
PLAYER_STATE_DRIVER
||
player_state
==
PLAYER_STATE_PASSENGER
)
{
byte bodyIDs
[
3
]
=
{
8
,
7
,
6
}
;
CVector head
;
random_bone
=
bodyIDs
[
rand
(
)
%
2
]
;
Ped
->
GetTransformedBonePosition
(
(
eBone
)
random_bone
,
&
head
)
;
out_spread
[
0
]
=
head
.
fX
-
target_pos
[
0
]
;
out_spread
[
1
]
=
head
.
fY
-
target_pos
[
1
]
;
out_spread
[
2
]
=
head
.
fZ
-
target_pos
[
2
]
;
return
9
;
}
if
(
random_bone
==
5
||
random_bone
==
8
||
random_bone
==
7
||
random_bone
==
6
)
return
9
;
if
(
random_bone
==
4
||
random_bone
==
21
||
random_bone
==
3
||
random_bone
==
31
)
return
3
;
if
(
random_bone
==
2
||
random_bone
==
1
)
return
4
;
if
(
random_bone
==
34
||
random_bone
==
33
||
random_bone
==
35
||
random_bone
==
32
||
random_bone
==
36
)
return
5
;
if
(
random_bone
==
24
||
random_bone
==
23
||
random_bone
==
25
||
random_bone
==
22
||
random_bone
==
26
)
return
6
;
if
(
random_bone
==
43
||
random_bone
==
44
||
random_bone
==
42
||
random_bone
==
41
)
return
7
;
if
(
random_bone
==
53
||
random_bone
==
54
||
random_bone
==
52
||
random_bone
==
51
)
return
8
;
return
255
;
}


Пример:

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


C++:





Код:
WORD targetID
=
ид игрока
;
if
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
iIsListed
[
targetID
]
&&
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
IsPlayerDefined
(
targetID
,
true
)
)
{
float
TargetPos
[
3
]
,
Spread
[
3
]
;
// В Spread будет записан рассчитаный разброс
switch
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
targetID
]
->
pPlayerData
->
bytePlayerState
)
{
case
PLAYER_STATE_ONFOOT
:
for
(
short
x
=
0
;
x

getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
targetID
]
->
pPlayerData
->
fOnFootPos
[
x
]
;
break
;
case
PLAYER_STATE_DRIVER
:
for
(
short
x
=
0
;
x

getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
targetID
]
->
pPlayerData
->
inCarData
.
fPosition
[
x
]
;
break
;
case
PLAYER_STATE_PASSENGER
:
for
(
short
x
=
0
;
x

getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
targetID
]
->
pPlayerData
->
passengerData
.
fPosition
[
x
]
;
break
;
}
byte BodyPart
=
CalculateSpreadOffset
(
targetID
,
TargetPos
,
Spread
)
;
SF
->
getSAMP
(
)
->
sendGiveDamage
(
targetID
,
урон
,
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
byteCurrentWeapon
,
BodyPart
)
;
// Шлём Bullet Sync с нашим Spread
}


Подмена цели с зелёного треугольника над головой

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


C++:





Код:
struct
stWeaponData
{
WORD index
;
WORD iTargetID
;
BYTE slot
;
BYTE weapon
;
WORD ammo
;
}
;
bool
SendFakeWeaponData
(
WORD targetID
)
{
byte cam
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
aimData
.
byteCamMode
;
if
(
cam
!=
53
&&
cam
!=
46
)
return
false
;
if
(
!
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
iIsListed
[
targetID
]
||
!
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
IsPlayerDefined
(
targetID
,
true
)
)
return
false
;
byte state
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
CS
->
cfg
.
LastTargetID
]
->
pPlayerData
->
bytePlayerState
;
if
(
state
!=
PLAYER_STATE_PASSENGER
&&
state
!=
PLAYER_STATE_DRIVER
)
{
BitStream bs
;
stWeaponData wdata
;
ZeroMemory
(
&
wdata
,
sizeof
(
stWeaponData
)
)
;
wdata
.
index
=
targetID
;
wdata
.
iTargetID
=
targetID
;
wdata
.
slot
=
PEDSELF
->
GetCurrentWeaponSlot
(
)
;
wdata
.
weapon
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
byteCurrentWeapon
;
wdata
.
ammo
=
PEDSELF
->
GetWeapon
(
PEDSELF
->
GetCurrentWeaponSlot
(
)
)
->
GetAmmoTotal
(
)
;
bs
.
Write
(
(
BYTE
)
ID_WEAPONS_UPDATE
)
;
bs
.
Write
(
(
PCHAR
)
&
wdata
,
sizeof
(
stWeaponData
)
)
;
SF
->
getRakNet
(
)
->
SendPacket
(
&
bs
)
;
}
return
false
;
}


Пример:

C++:





Код:
SendFakeWeaponData
(
228
)
;
// Использовать в хуке ID_WEAPONS_UPDATE с блокировкой оригинального пакета


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

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


C++:





Код:
CPed
*
LastPed
=
nullptr
;
CPed
*
TargetPed
=
nullptr
;
void
DeleteGameHooks
(
bool
FindPlayerPed
,
bool
AddTrace
)
{
if
(
FindPlayerPed
)
{
byte Prologue
[
6
]
=
{
0x8B
,
0x44
,
0x24
,
0x04
,
0x85
,
0xC0
}
;
DWORD old_prot
;
VirtualProtect
(
(
void
*
)
0x56E210
,
6
,
PAGE_EXECUTE_READWRITE
,
&
old_prot
)
;
memcpy
(
(
void
*
)
0x56E210
,
Prologue
,
6
)
;
VirtualProtect
(
(
void
*
)
0x56E210
,
6
,
old_prot
,
&
old_prot
)
;
}
if
(
AddTrace
)
{
byte Prologue
[
5
]
=
{
0x83
,
0xEC
,
0x1C
,
0x33
,
0xC9
}
;
DWORD old_prot
;
VirtualProtect
(
(
void
*
)
0x723750
,
5
,
PAGE_EXECUTE_READWRITE
,
&
old_prot
)
;
memcpy
(
(
void
*
)
0x723750
,
Prologue
,
5
)
;
VirtualProtect
(
(
void
*
)
0x723750
,
5
,
old_prot
,
&
old_prot
)
;
}
}
bool
GetTargetPos
(
CVector
*
vec
)
{
if
(
TargetPed
==
nullptr
)
return
false
;
else
{
vec
=
TargetPed
->
GetPosition
(
)
;
return
true
;
}
return
false
;
}
bool
SetTargetPed
(
WORD playerId
)
{
if
(
!
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
iIsListed
[
playerId
]
||
!
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
IsPlayerDefined
(
playerId
,
true
)
)
return
false
;
else
{
actor_info
*
actorInfo
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
playerId
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
;
if
(
actorInfo
==
nullptr
)
return
false
;
CPed
*
Ped
=
GAME
->
GetPools
(
)
->
GetPed
(
(
DWORD
*
)
actorInfo
)
;
if
(
Ped
==
nullptr
)
return
false
;
TargetPed
=
Ped
;
return
true
;
}
return
false
;
}
CPed
*
__cdecl
FindPlayerPed
(
int
number
)
{
DeleteGameHooks
(
true
,
false
)
;
LastPed
=
(
(
CPed
*
(
__cdecl
*
)
(
int
)
)
0x56E210
)
(
number
)
;
SF
->
getGame
(
)
->
createHook
(
(
void
*
)
0x56E210
,
&
FindPlayerPed
,
DETOUR_TYPE_JMP
,
6
)
;
return
LastPed
;
}
void
__cdecl
AddTrace
(
CVector
*
start
,
CVector
*
end
,
float
radius
,
unsigned
int
time
,
unsigned
char
transparency
)
{
if
(
(
TargetPed
!=
nullptr
&&
LastedPed
!=
nullptr
)
&&
LastPed
==
TargetPed
)
{
CVector NewDirection
;
if
(
GetTargetPos
(
&
NewDirection
)
)
{
end
->
fX
=
NewDirection
.
fX
;
end
->
fY
=
NewDirection
.
fY
;
end
->
fZ
=
NewDirection
.
fZ
;
}
}
DeleteGameHooks
(
false
,
true
)
;
(
(
void
(
__cdecl
*
)
(
CVector
*
,
CVector
*
,
float
,
unsigned
int
,
unsigned
char
)
)
0x723750
)
(
start
,
end
,
radius
,
time
,
transparency
)
;
SF
->
getGame
(
)
->
createHook
(
(
void
*
)
0x723750
,
&
AddTrace
,
DETOUR_TYPE_JMP
,
5
)
;
}
void
__stdcall
Destructor
(
)
{
DeleteGameHooks
(
true
,
true
)
;
}


Пример использования:

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


C++:





Код:
SetTargetPed
(
bullet
.
sTargetID
)
;
// Вызываем в хуке ID_BULLET_SYNC перед отправкой пули
void
__stdcall
mainloop
(
void
)
{
static
bool
init
=
false
;
if
(
!
init
)
{
if
(
GAME
==
nullptr
)
return
;
if
(
GAME
->
GetSystemState
(
)
!=
eSystemState
::
GS_PLAYING_GAME
)
return
;
if
(
!
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
return
;
SF
->
getGame
(
)
->
registerGameDestructorCallback
(
Destructor
)
;
SF
->
getGame
(
)
->
createHook
(
(
void
*
)
0x56E210
,
&
FindPlayerPed
,
DETOUR_TYPE_JMP
,
6
)
;
SF
->
getGame
(
)
->
createHook
(
(
void
*
)
0x723750
,
&
AddTrace
,
DETOUR_TYPE_JMP
,
5
)
;
init
=
true
;
}
}


 
Ответить с цитированием

  #20  
Старый 11.12.2018, 13:51
Неадекватная сова
Постоянный
Регистрация: 02.06.2018
Сообщений: 342
С нами: 4183567

Репутация: 133
По умолчанию

Цитата:
Сообщение от AWRage  

Я думаю, по названиям функций понятно.

C++:





Код:
int
GetWeaponID
(
)
{
return
PEDSELF
->
GetWeapon
(
PEDSELF
->
GetCurrentWeaponSlot
(
)
)
->
GetType
(
)
;
}
eWeaponState
GetWeaponState
(
)
{
return
PEDSELF
->
GetWeapon
(
PEDSELF
->
GetCurrentWeaponSlot
(
)
)
->
GetState
(
)
;
}
int
GetAmmoInClip
(
)
{
return
PEDSELF
->
GetWeapon
(
PEDSELF
->
GetCurrentWeaponSlot
(
)
)
->
GetAmmoInClip
(
)
;
}
int
GetAmmoTotal
(
)
{
return
PEDSELF
->
GetWeapon
(
PEDSELF
->
GetCurrentWeaponSlot
(
)
)
->
GetAmmoTotal
(
)
;
}
int
GetWantedLevel
(
)
{
return
*
(
DWORD
*
)
0x58DB60
;
}

В дополнение. Получение уровня усталости

Код:





Код:
int GetSprintLevel()
{
    float sprintLocalPlayer = *(float*)0xB7CDB4;
    return (sprintLocalPlayer / 31.47000244 + 4.78) / 1.040;
}
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.