 |
|

22.10.2018, 15:38
|
|
Познавший АНТИЧАТ
Регистрация: 01.04.2018
Сообщений: 1,710
С нами:
4272230
Репутация:
183
|
|
Как проверить то что игрок стреляет?
|
|
|

22.10.2018, 15:49
|
|
Постоянный
Регистрация: 28.03.2013
Сообщений: 495
С нами:
6908018
Репутация:
213
|
|
Сообщение от Musaigen
Как проверить то что игрок стреляет?
можно в этой структуре
C++:
Код:
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
->
pPlayerData
->
onFootData
.
stSampKeys
.
keys_primaryFire
либо через эту структуру, но её нет в SF
C++:
Код:
g_Players
->
pRemotePlayer
[
id
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
->
pedFlags
.
bFiringWeapon
еще можно через анимку
|
|
|

23.10.2018, 01:49
|
|
Участник форума
Регистрация: 13.03.2016
Сообщений: 242
С нами:
5351007
Репутация:
0
|
|
Сообщение от beento
можешь скинуть код который будет возвращать aim sync в прошлое положение?
Что мешает записывать в массив старый вектор перед отправкой?
|
|
|

24.10.2018, 16:36
|
|
Познавший АНТИЧАТ
Регистрация: 01.04.2018
Сообщений: 1,710
С нами:
4272230
Репутация:
183
|
|
Как можно получить id транспорта имея его vehicle_info?
И ещё, как проверить, то что игрок водит любую машину?
|
|
|

24.10.2018, 17:16
|
|
Участник форума
Регистрация: 13.03.2016
Сообщений: 242
С нами:
5351007
Репутация:
0
|
|
Сообщение от Musaigen
Как можно получить id транспорта имея его vehicle_info?
И ещё, как проверить, то что игрок водит любую машину?
Получение samp vehicle ида по vehicle_info
C++:
Код:
WORD
GetVehicleIdFromStruct
(
vehicle_info
*
vif
)
{
if
(
vif
==
nullptr
)
return
65535
;
for
(
WORD v
=
0
;
v
getSAMP
(
)
->
getVehicles
(
)
->
pGTA_Vehicle
[
v
]
)
return
v
;
}
return
65535
;
}
Проверка игрока на вождение
C++:
Код:
bool
IsPlayerDriving
(
WORD playerId
)
{
if
(
!
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
iIsListed
[
playerId
]
)
return
false
;
if
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
sLocalPlayerID
==
playerId
)
{
if
(
SF
->
getGame
(
)
->
getCurrentState
(
)
==
CHEAT_STATE_VEHICLE
&&
(
SF
->
getSAMP
(
)
->
getVehicles
(
)
->
iIsListed
[
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
inCarData
.
sVehicleID
]
&&
SF
->
getSAMP
(
)
->
getVehicles
(
)
->
iIsListed2
[
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
inCarData
.
sVehicleID
]
)
)
return
true
;
}
else
{
if
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
playerId
]
->
pPlayerData
->
bytePlayerState
==
PLAYER_STATE_DRIVER
)
return
true
;
}
return
false
;
}
|
|
|

26.10.2018, 16:20
|
|
Участник форума
Регистрация: 17.12.2017
Сообщений: 110
С нами:
4423953
Репутация:
68
|
|
пуля не отправляется через стену
C++:
Код:
void
BulletData
(
uint16_t
id
)
{
stBulletData sync
;
ZeroMemory
(
&
sync
,
sizeof
(
stBulletData
)
)
;
stRemotePlayer
*
pPlayer
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
;
if
(
!
pPlayer
)
return
;
float
aimHit
[
3
]
=
{
PEDSELF
->
GetPosition
(
)
->
fX
,
PEDSELF
->
GetPosition
(
)
->
fY
,
PEDSELF
->
GetPosition
(
)
->
fZ
}
;
float
bodyPos
[
3
]
=
{
pPlayer
->
pPlayerData
->
fOnFootPos
[
0
]
,
pPlayer
->
pPlayerData
->
fOnFootPos
[
1
]
,
pPlayer
->
pPlayerData
->
fOnFootPos
[
2
]
}
;
float
hitPos
[
3
]
=
{
0.0
,
0.0
,
0.5
}
;
sync
.
fOrigin
[
0
]
=
aimHit
[
0
]
;
sync
.
fOrigin
[
1
]
=
aimHit
[
1
]
;
sync
.
fOrigin
[
2
]
=
aimHit
[
2
]
;
sync
.
fTarget
[
0
]
=
bodyPos
[
0
]
;
sync
.
fTarget
[
1
]
=
bodyPos
[
1
]
;
sync
.
fTarget
[
2
]
=
bodyPos
[
2
]
;
sync
.
fCenter
[
0
]
=
hitPos
[
0
]
;
sync
.
fCenter
[
1
]
=
hitPos
[
1
]
;
sync
.
fCenter
[
2
]
=
hitPos
[
2
]
;
sync
.
byteWeaponID
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
byteCurrentWeapon
;
sync
.
byteType
=
1
;
sync
.
sTargetID
=
id
;
BitStream BulletSync
;
BulletSync
.
Write
(
(
BYTE
)
PacketEnumeration
::
ID_BULLET_SYNC
)
;
BulletSync
.
Write
(
(
PCHAR
)
&
sync
,
sizeof
(
stBulletData
)
)
;
SF
->
getRakNet
(
)
->
SendPacket
(
&
BulletSync
)
;
UpdateAmmo
(
)
;
}
inline
void
SendTakeDamageRPC
(
uint32_t
TargetID
,
unsigned
int
weapon_id
,
int
damage
)
{
BitStream bs
;
bs
.
Write
(
true
)
;
bs
.
Write
(
TargetID
)
;
bs
.
Write
(
(
float
)
damage
)
;
bs
.
Write
(
weapon_id
)
;
bs
.
Write
(
3
)
;
SF
->
getRakNet
(
)
->
SendRPC
(
RPCEnumeration
::
RPC_GiveTakeDamage
,
&
bs
)
;
}
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
)
// SAMP ID цели
{
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
)
;
}
void
SendFakeParameters
(
int
id
)
{
AimVectorToPlayer
(
id
)
;
BulletData
(
id
)
;
SendTakeDamageRPC
(
id
,
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
byteCurrentWeapon
,
11
)
;
}
|
|
|

26.10.2018, 17:05
|
|
Участник форума
Регистрация: 13.03.2016
Сообщений: 242
С нами:
5351007
Репутация:
0
|
|
Сообщение от beento
пуля не отправляется через стену
C++:
Код:
void
BulletData
(
uint16_t
id
)
{
stBulletData sync
;
ZeroMemory
(
&
sync
,
sizeof
(
stBulletData
)
)
;
stRemotePlayer
*
pPlayer
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
;
if
(
!
pPlayer
)
return
;
float
aimHit
[
3
]
=
{
PEDSELF
->
GetPosition
(
)
->
fX
,
PEDSELF
->
GetPosition
(
)
->
fY
,
PEDSELF
->
GetPosition
(
)
->
fZ
}
;
float
bodyPos
[
3
]
=
{
pPlayer
->
pPlayerData
->
fOnFootPos
[
0
]
,
pPlayer
->
pPlayerData
->
fOnFootPos
[
1
]
,
pPlayer
->
pPlayerData
->
fOnFootPos
[
2
]
}
;
float
hitPos
[
3
]
=
{
0.0
,
0.0
,
0.5
}
;
sync
.
fOrigin
[
0
]
=
aimHit
[
0
]
;
sync
.
fOrigin
[
1
]
=
aimHit
[
1
]
;
sync
.
fOrigin
[
2
]
=
aimHit
[
2
]
;
sync
.
fTarget
[
0
]
=
bodyPos
[
0
]
;
sync
.
fTarget
[
1
]
=
bodyPos
[
1
]
;
sync
.
fTarget
[
2
]
=
bodyPos
[
2
]
;
sync
.
fCenter
[
0
]
=
hitPos
[
0
]
;
sync
.
fCenter
[
1
]
=
hitPos
[
1
]
;
sync
.
fCenter
[
2
]
=
hitPos
[
2
]
;
sync
.
byteWeaponID
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
byteCurrentWeapon
;
sync
.
byteType
=
1
;
sync
.
sTargetID
=
id
;
BitStream BulletSync
;
BulletSync
.
Write
(
(
BYTE
)
PacketEnumeration
::
ID_BULLET_SYNC
)
;
BulletSync
.
Write
(
(
PCHAR
)
&
sync
,
sizeof
(
stBulletData
)
)
;
SF
->
getRakNet
(
)
->
SendPacket
(
&
BulletSync
)
;
UpdateAmmo
(
)
;
}
inline
void
SendTakeDamageRPC
(
uint32_t
TargetID
,
unsigned
int
weapon_id
,
int
damage
)
{
BitStream bs
;
bs
.
Write
(
true
)
;
bs
.
Write
(
TargetID
)
;
bs
.
Write
(
(
float
)
damage
)
;
bs
.
Write
(
weapon_id
)
;
bs
.
Write
(
3
)
;
SF
->
getRakNet
(
)
->
SendRPC
(
RPCEnumeration
::
RPC_GiveTakeDamage
,
&
bs
)
;
}
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
)
// SAMP ID цели
{
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
)
;
}
void
SendFakeParameters
(
int
id
)
{
AimVectorToPlayer
(
id
)
;
BulletData
(
id
)
;
SendTakeDamageRPC
(
id
,
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
byteCurrentWeapon
,
11
)
;
}
Ясен трясен, во-первых тебе нужно sync.fOrigin[2] = aimHit[2]; рандомить немного чтобы античит на сало не выебал
Во-вторых у тебя разброс не может быть таким - его спалит любой античит старый, зайди в тему SF полезные функции в этом же разделе, я там вылаживал свою функу расчёта валидного разброса до нужной части тела.
И к слову, ты получаешь пешую позицию жертвы но не проверяешь пешком ли она, если будет в тачке будут траблы, нужно и для тачки позицию брать если чел в каре
|
|
|

26.10.2018, 17:30
|
|
Участник форума
Регистрация: 17.12.2017
Сообщений: 110
С нами:
4423953
Репутация:
68
|
|
на сервере без античита все равно не проходит пуля через стену
а как зарандомить aimhit[2]?
C++:
Код:
void
SendFakeParameters
(
int
id
)
{
float
TargetPos
[
3
]
,
Spread
[
3
]
;
// В Spread будет записан рассчитаный разброс
switch
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
->
pPlayerData
->
bytePlayerState
)
{
case
PLAYER_STATE_ONFOOT
:
for
(
short
x
=
0
;
x
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
->
pPlayerData
->
fOnFootPos
[
x
]
;
break
;
case
PLAYER_STATE_DRIVER
:
for
(
short
x
=
0
;
x
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
->
pPlayerData
->
inCarData
.
fPosition
[
x
]
;
break
;
case
PLAYER_STATE_PASSENGER
:
for
(
short
x
=
0
;
x
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
->
pPlayerData
->
passengerData
.
fPosition
[
x
]
;
break
;
}
byte BodyPart
=
CalculateSpreadOffset
(
id
,
TargetPos
,
Spread
)
;
AimVectorToPlayer
(
id
)
;
SendTakeDamageRPC
(
id
,
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
byteCurrentWeapon
,
CalculateDamage
(
)
,
BodyPart
)
;
BulletData
(
id
)
;
}
|
|
|

26.10.2018, 17:38
|
|
Постоянный
Регистрация: 28.03.2013
Сообщений: 495
С нами:
6908018
Репутация:
213
|
|
Сообщение от beento
пуля не отправляется через стену
inline void SendTakeDamageRPC(uint32_t TargetID, unsigned int weapon_id, int damage)
{
BitStream bs;
bs.Write(true);
bs.Write(TargetID);
bs.Write((float)damage);
bs.Write(weapon_id);
bs.Write(3);
SF->getRakNet()->SendRPC(RPCEnumeration::RPC_GiveTakeDamage, &bs);
}
[/code]
Исправь первый параметр на false
|
|
|

26.10.2018, 17:48
|
|
Флудер
Регистрация: 03.08.2016
Сообщений: 2,363
С нами:
5145387
Репутация:
183
|
|
Сообщение от beento
а как зарандомить aimhit[2]?
C++:
Код:
int
a
=
1
+
rand
(
)
%
100
;
float
r_float
;
// 0.00 to 1.00
r_float
=
a
/
100.0
;
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|